如果我公开VIEW
CREATE VIEW myView AS
SELECT ...
FROM ...
通过xsodata
service namespace "oData" {
entity "mySchema"."myView" as "myView";
}
创建VIEW后第一次和GET / myView性能非常低:
但是:在再次执行相同的请求之后(以及之后的每次),性能都是我想要的:
问题:
为什么?
如何避免第一个长时间运行的请求?
已经尝试过:
在HANA Studios SQL控制台中执行sql profiler-output(无语句准备)总能提供良好的性能
表格加载(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
)的方法只是使条目无效并且没有自动更新...
答案 0 :(得分:1)
我不确定您可以 REMOVE 第一次执行,但您可以尝试将视图更改为SQL Engine
中执行的计算视图。
HANA
已针对使用其计算视图进行了超级优化,并且计划缓存应该更快地运行,可能会显着缩短第一个执行时间。另外,Plan Calc of Calc。用户之间应该共享视图(因为_SYS_REPO
是生成它们的人)。
如果您使用脚本版本,我相信您可以重复使用当前的许多SQL,但您也可以尝试使用图形方法。
如果你有运气,请告诉我们。使用大数据建模总是令人惊讶。