如果我暴露一个 VIEW
CREATE VIEW myView AS
SELECT ...
FROM ...
通过 xsodata
service namespace "oData" {
entity "mySchema"."myView" as "myView";
}
和 GET /myView 在创建 VIEW 后第一次性能非常低:
但是:在再次执行相同的请求之后(并且每次之后),性能就是我想要的:
问题:
为什么?
如何避免第一个长时间运行的请求?
已经尝试过:
在 HANA Studios SQL 控制台中执行 sql profiler-output(无需语句准备)始终提供良好的性能
表热加载 (
LOAD myTable ALL;
) 没有效果
更新
我们发现了“为什么”-部分:即使请求中没有参数,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
)的方法只是使条目无效并且没有自动更新它......