1

如果我暴露一个 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)的方法只是使条目无效并且没有自动更新它......

4

1 回答 1

1

我不确定您是否可以长时间删除第一次执行,但您可以尝试将视图更改为在SQL Engine.

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

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

让我们知道您是否有任何运气。使用大数据建模总是令人惊喜。

于 2016-09-05T19:32:50.667 回答