减少对检索时间的动态计算影响

除非成员包含复杂的公式,否则动态计算密集维的成员时,检索时间的增加并不重要。将稀疏维的成员标记为动态计算时,检索时间的增加可能会很大。

您可以通过关注检索系数、检索缓冲区大小和计算器高速缓存来分析和管理 Dynamic Calc 成员对 Essbase 数据库的影响。

注意:

有关对查询检索影响最显著的函数的列表,请参见 Member Set Functions and Performance

显示检索系数

为了帮助您估计检索时间的任何增加,在保存大纲时, Essbase 会计算数据库大纲的检索系数。Essbase 根据 Essbase 计算成本最高的动态计算数据块计算此检索因子。检索系数仅考虑聚合。它不考虑公式的检索影响。

检索系数是 Essbase 必须从磁盘或数据库中检索以计算最昂贵块的数据块数。如果数据库仅在密集维中具有动态计算成员(稀疏维中没有动态计算成员),则检索系数为 1。

检索系数高的大纲(例如,大于 2000)在用户检索数据时会导致长时间延迟。但是,对检索时间的实际影响还取决于用户检索的动态计算数据值的数量。检索系数只是一个指示符。在某些应用程序中,使用动态计算成员可能会减少检索时间,因为数据库大小和索引大小会减少。

Essbase 在应用程序日志中显示检索系数值。

类似于此示例的消息指示检索因子:


Essbase needs to retrieve [1] Essbase kernel blocks in order
to calculate the top dynamically-calculated block.

此消息告诉您, Essbase 需要检索一个块来计算最昂贵的动态计算数据块。

增加检索缓冲区大小

当用户从 Smart View 、MDX 或 Report Writer 查询时, Essbase 将使用检索缓冲区优化查询。增加检索缓冲区大小可以提高查询性能,因为 Essbase 可以同时处理较大的数据部分。

默认情况下,检索缓冲区大小为 20 KB。但是,如果将检索缓冲区大小设置为大于 20 KB,则可以加快检索时间。

要增加检索缓冲区大小,可以使用 MaxL alter database 语句。例如:

alter database Sample.Basic set retrieve_buffer_size 20kb;

或者,您可以使用 Essbase Web 界面更改数据库定制设置中的缓冲区大小。

使用动态计算器缓存

默认情况下,当 Essbase 计算密集维(例如,对于查询)中的动态计算成员时,它将计算所需的所有块写入内存中称为动态计算器高速缓存的区域。当 Essbase 将这些块写入动态计算器高速缓存时,它会展开这些块以将所有动态计算成员包括在密集维中。

如果查询在密集维中包含双遍计算成员,则查询需要为每个检索到的块提供一个动态计算器高速缓存。

使用 Essbase 动态计算器高速缓存可以集中控制动态计算的内存使用情况。在动态计算器高速缓存中管理数据块还可以减少对整体内存空间的需求,并且可以通过减少对操作系统执行内存分配的调用数来提高性能。

注意:

动态计算器高速缓存和计算器高速缓存使用不同的方法来优化计算性能。

另请参阅:设置动态计算器高速缓存的大小设置计算器高速缓存的大小

查看动态计算器高速缓存使用情况

Essbase 为每次数据检索将两条消息写入应用程序日志。在以下示例中,第一条消息描述了检索所需的总时间:


Regular Extractor Elapsed Time : [0.531] seconds
Regular Extractor Big Blocks Allocs -- Dyn.Calc.Cache : [30] non-Dyn.Calc.Cache : [0]

如果使用动态计算器高速缓存,则第二条消息将显示在数据计算器高速缓存 (Dyn.Calc.Cache:[n]) 中计算的块数以及在动态计算器高速缓存外的内存中计算的块数(非 Dyn.Calc.Cache:[n])。

要确定是否有效使用动态计算器高速缓存,请查看消息并考虑配置设置。例如,如果消息指示块是在动态计算器高速缓存外部计算的,则可以增大 DYNCALCCACHEMAXSIZE 设置。

如果为服务器上的所有动态计算器高速缓存指定了最大大小,并且如果使用计算器高速缓存外的内存来完成动态计算的检索,则会导致不可接受的延迟(例如,由于交换或分页活动),请将 DYNCALCCACHEWAITFORBLK 设置为 TRUE。

可以使用带有性能统计信息语法的 query database MaxL 语句来查看动态计算器高速缓存活动的摘要。