HANA:xsodata:第一次和第二次请求执行之间存在巨大的性能差距

时间:2016-08-19 09:03:28

标签: odata sap hana xsengine xsodata

如果我公开VIEW

CREATE VIEW myView AS
SELECT ...
FROM ...

通过xsodata

service namespace "oData" {
    entity "mySchema"."myView" as "myView";
}
创建VIEW后第一次

和GET / myView性能非常低:

enter image description here

但是:在再次执行相同的请求之后(以及之后的每次),性能都是我想要的:

enter image description here

问题:

  • 为什么?

  • 如何避免第一个长时间运行的请求?

已经尝试过:

  • 在HANA Studios SQL控制台中执行sql profiler-output(无语句准备)总能提供良好的性能

  • 表格加载(LOAD myTable ALL;)无效

更新

我们发现了“为什么”-Part:xs-engine正在将查询作为预准备语句运行,即使请求中没有参数也是如此。在第一次执行时(在用户的上下文中),查询得到了准备,从而导致M_SQL_PLAN_CACHESELECT * FROM M_SQL_PLAN_CACHE WHERE USER_NAME = 'myUser')中的条目。清除计划缓存(ALTER SYSTEM CLEAR SQL PLAN CACHE)会使oData请求再次变慢,导致假设性能差距在于重新准备查询。

我们现在坚持第二个问题:如何避免这种情况?我们标记某些计划缓存条目以进行重新编译(ALTER SYSTEM RECOMPILE SQL PLAN CACHE ENTRY 123)的方法只是使条目无效并且没有自动更新...

1 个答案:

答案 0 :(得分:1)

我不确定您可以 REMOVE 第一次执行,但您可以尝试将视图更改为SQL Engine中执行的计算视图。

HANA已针对使用其计算视图进行了超级优化,并且计划缓存应该更快地运行,可能会显着缩短第一个执行时间。另外,Plan Calc of Calc。用户之间应该共享视图(因为_SYS_REPO是生成它们的人)。

如果您使用脚本版本,我相信您可以重复使用当前的许多SQL,但您也可以尝试使用图形方法。

如果你有运气,请告诉我们。使用大数据建模总是令人惊讶。