Если я разоблачить VIEWHANA: xsodata: Огромный разрыв в производительности между первым и 2-го исполнения запроса
CREATE VIEW myView AS
SELECT ...
FROM ...
через xsodata
service namespace "oData" {
entity "mySchema"."myView" as "myView";
}
и GET/MyView впервые после создания VIEW ПРЕДСТАВЛЕНИЕМ очень низкая:
Однако: После того, как ре rforming тот же запрос снова (и каждый раз после этого) производительность является то, что я хочу, чтобы это было:
Вопросы:
Почему?
Как избежать первого долговременного запроса?
Уже пробовал:
Выполнение SQL Profiler-вывода (без подготовки заявления) в консоли HANA Studios SQL дает хорошую производительность всегда
Таблица hotloading (
LOAD myTable ALL;
) не имело эффект
Обновление
Мы выяснили, что «почему» -part: xs-engine запускает запрос как подготовленный оператор, даже если в запросе нет параметров. При первом выполнении (в контексте пользователя) запрос получает значение, что приводит к записи в M_SQL_PLAN_CACHE
(SELECT * FROM M_SQL_PLAN_CACHE WHERE USER_NAME = 'myUser'
). Очистка кеша плана (ALTER SYSTEM CLEAR SQL PLAN CACHE
) делает запрос OData медленным, что приводит к предположению, что разрыв в производительности заключается в повторной подготовке запроса.
Мы застряли со вторым вопросом: как этого избежать? Наш подход, чтобы отметить определенные записи кэша плана для перекомпиляции (ALTER SYSTEM RECOMPILE SQL PLAN CACHE ENTRY 123
) просто аннулировал запись и не обновлять автоматически ...
Включить профайлер oData: https://scn.sap.com/thread/3744633 – Benvorth
Необычно, что первое выполнение запроса происходит медленнее, чем последующие. В первом плане выполнения генерация/оптимизация и создание кэшей могут занять некоторое время (в зависимости от сложности представления и размера базовых таблиц), но кэшируются и будут доступны, когда запрос будет выполнен снова. – Goldfishslayer
К сожалению, это делает наше приложение недоступным, так как подготовка инструкций для каждого пользователя (View 'M_SQL_PLAN_CACHE'). Возможно, есть способ «предварительно получить» или обновить инструкцию? 'ALTER SYSTEM RECOMPILE SQL PLAN CACHE ENTRY 1234' просто« аннулировал »запись (снова сделал запрос медленнее), но не обновил его без« ручного »запроса ... – Benvorth