Essbase 高速缓存和计算性能

为了优化计算性能(尤其是大型计算), Essbase 使用高速缓存来协调内存使用情况。确保计算器高速缓存(如果使用)足够大,可以优化计算。查看索引高速缓存、数据高速缓存、动态计算器高速缓存和应用程序高速缓存的关联性。

计算多维数据集时, Essbase 在大纲中每个成员使用大约 30 字节的内存。因此,如果多维数据集具有 5,000 个成员,则 Essbase 需要大约 150 KB 的内存来计算它。

注意:

通过组合计算脚本,可以避免过度使用内存。通过将并行计算与单个计算脚本结合使用,可以获得良好的性能。请参阅使用并行计算

Essbase 使用内存优化计算性能,尤其是大型计算。使用的内存量不可控制,除非通过更改多维数据集大纲的大小。但是,您可以确保内存高速缓存大小使 Essbase 能够优化计算。

Essbase 使用以下高速缓存来协调内存使用情况:

  • 计算器缓存。

    首次计算多维数据集时,计算器高速缓存的大小对于计算性能非常重要。如果可能,请确保计算器高速缓存足够大,以便 Essbase 使用最佳计算器高速缓存选项。

    请参阅调整计算器高速缓存的大小

  • 动态计算器缓存。请参阅调整动态计算器高速缓存的大小

  • 索引缓存。如果多维数据集很大,则默认索引高速缓存不够大,无法提供最佳计算性能。请参阅 INDEXCACHESIZE 应用程序配置属性或 MaxL alter database set index_cache_size

  • 数据缓存。请参阅 DATACACHESIZE 应用程序配置属性或 MaxL alter database set data_cache_size

  • 数据文件高速缓存。

  • 应用程序缓存。如果块存储多维数据集中使用混合模式,则应用程序高速缓存可以帮助您管理用于检索的内存使用情况。应用程序高速缓存类似于聚合存储高速缓存;有关更多信息,请参阅聚合存储高速缓存

调整计算器高速缓存的大小

如果使用 Essbase 计算器缓存的最佳大小取决于大纲中稀疏维的数目和密度。了解计算器缓存位图将帮助您优化计算器缓存的大小。

为了优化块管理, Essbase 可以创建位图(其大小由计算器高速缓存的大小控制),以便在计算过程中记录和跟踪数据块。对于 Essbase ,位图是一种比磁盘 I/O 更快的检索方法,特别是如果您是首次计算多维数据集,或者使用稀疏数据计算多维数据集。

如果数据库至少具有两个稀疏维并且同时满足以下任一条件,则 Essbase 使用计算器高速缓存位图:

  • 至少计算一个完整的稀疏维。

  • 可以在计算脚本中指定 SET CACHE ALL 命令。

关于计算器缓存位图

对于计算器高速缓存, Essbase 将稀疏维分成两组:

  • 位图维: Essbase 在位图已满之前适合的稀疏维。位图中放置的稀疏维的每个成员组合占用 1 位内存。位图中必须有足够的空间,稀疏维的每个成员组合才能将其放置在位图中。

  • 锚定维:数据库大纲中不适合位图的其余一个或多个稀疏维。

Essbase 从大纲中的第一个稀疏维开始,并尽可能多地适合位图。拟合的维是位图维。由于计算器高速缓存控制位图的大小,因此可以拟合的稀疏维数取决于计算器高速缓存的大小。

剩余的稀疏维是锚定维。对于锚定维, Essbase 无法使用位图来确定是否存在块。

要查看哪些维是锚定维,哪些是位图维,请使用 SET MSG DETAIL 计算命令在应用程序日志中显示位图信息。

小心地对大纲中的稀疏维进行排序,以便可以将尽可能多的维放置到位图中。从包含成员最少的维开始,然后继续,直到成员最多的维是最后一个。此顺序允许更多维适应位图,从而提高计算性能。

注意:

大纲中稀疏维的顺序也会影响查询性能。请参阅设计大纲以优化绩效

如果存在多个锚定维(或者计算器高速缓存不够大,无法支持多个位图),则 Essbase 使用单个位图;如果存在一个锚定维,则使用多个位图。单个位图使用的内存最少,但效率低于多个位图。

多个位图使用更多的内存,但比使用单个位图更快。一个位图跟踪子块,一个位图跟踪父块。首次计算数据库时,性能提升特别高。

使用的位图数由锚定维中任何成员的最大依赖父代数确定。成员具有一个从属父代,除非其具有共享成员。例如,考虑 Sample.Basic 数据库的 Product 维。成员 Cola (100-10) 有一个父代 Colas (100)。然而,饮食可乐 (100-20) 有两个父母,饮食(饮食)和可乐 (100)。产品的成员没有两个以上的受抚养父母。因此,如果“产品”是锚定维度,则最大依赖父代为两个。

Essbase 为计算选择以下三个选项之一,如下表所示:

表 34-2 计算器高速缓存选项

选项 方法 绩效评级

1

单个锚定维度、多个位图

1

2

单个锚定维,单个位图

2

3

多个锚定维度,单个位图

3

Essbase 根据计算器高速缓存的大小为计算选择最佳性能方法。如果计算器高速缓存大小对于上述任一选项来说太小,则 Essbase 不会使用计算器高速缓存。计算性能可能会严重受损。

启用并行计算可能会更改所使用的计算器高速缓存选项。请参阅 CALCPARALLEL 并行计算与其他 Essbase 功能之间的关系

注意:

如果是首次计算数据库,则计算器高速缓存的大小对于计算性能尤为重要。如果可能,请确保计算器高速缓存足够大,以便 Essbase 使用最佳计算器高速缓存选项。

确定计算器高速缓存大小

计算器高速缓存的最佳大小取决于系统可用的内存以及多维数据集的性质和配置。

使用以下公式,您可以计算 Essbase 选择上面 Calculator Cache Options 表中的三个选项所需的计算器高速缓存大小:

Calculator cache = Bitmap size in bytes * Number of bitmaps

其中

Bitmap size in bytes = Max ((member combinations on the bitmap dimensions / 8), 4)

以及位置

Number of bitmaps = Maximum number of dependent parents in the anchoring dimension + 2 constant bitmaps

注意:

最小位图大小为 4 字节。如果(位图维/8 上的成员组合)小于 4 个字节,则 Essbase 使用 4 个字节的位图大小。

考虑具有五个稀疏维(S1 到 S5)的示例立方体:

表 34-3 示例:具有五个稀疏维的立方示例

稀疏维 成员数 受抚养人父母

S1

20

不适用

S2

20

不适用

S3

50

不适用

S4

50

不适用

S5

200

3

使用此示例多维数据集进行以下示例计算:

  • 选项 1:单个锚定维、多个位图
  • 选项 2:单锚定维、单位图
  • 选项 3:多个锚定维,单个位图

选项 1:单个锚定维、多个位图

对于此示例计算,假定有关数据库的以下事实:

  • 位图尺寸:S1、S2、S3、S4

  • 锚定尺寸:S5

  • 锚定维中的受抚养人父母:3

执行此计算:

Bitmap size in bytes = (S1 * S2 * S3 * S4) / 8
                     = (20 * 20 * 50 * 50) / 8
                     = 125,000 bytes

Number of bitmaps = Maximum number of dependent parents in the anchoring dimension
                  = + 
                  = 2 constant bitmaps
                  = 3 + 2
                  = 5

Calculator cache = Bitmap size * Number of bitmaps
                 = 125,000 * 5
                 = 625,000 bytes

要使 Essbase 对具有一个锚定维的数据库使用多个位图,计算器高速缓存必须为 625,000 字节。

选项 2:单锚定维、单位图

对于此示例计算,假定有关数据库的以下事实:

  • 位图尺寸:S1、S2、S3、S4

  • 锚定尺寸:S5

  • 锚定维中的受抚养人父母:不适用

执行此计算:

Bitmap size in bytes = (S1 * S2 * S3 * S4) / 8
                     = (20 * 20 * 50 * 50) / 8
                     = 125,000 bytes

Number of bitmaps = Single bitmap
                  = 1

Calculator cache = Bitmap size * Number of bitmaps
                 = 125,000 * 1
                 = 125,000 bytes

要使 Essbase 对具有一个锚定维的数据库使用单个位图,计算器高速缓存必须为 125,000 字节。

选项 3:多个锚定维,单个位图

对于此示例计算,假定有关数据库的以下事实:

  • 位图尺寸:S1、S2、S3

  • 锚定尺寸:S4,S5

  • 锚定维中的从属父项:不适用

执行此计算:

执行此计算:

Bitmap size in bytes = (S1 * S2 * S3) / 8
                     = (20 * 20 * 50) / 8
                     = 2,500 bytes

Number of bitmaps = Single bitmap
                  = 1

Calculator cache = Bitmap size * Number of bitmaps
                 = 2,500 * 1
                 = 2,500 bytes

要使 Essbase 对具有多个锚定维的数据库使用单个位图,计算器高速缓存必须为 2,500 字节。

下表显示了 Essbase 使用的计算器高速缓存选项,具体取决于指定的计算器高速缓存大小:

表 34-4 基于计算器高速缓存大小的计算器高速缓存选项选择

指定的最小大小 选定选项

625,000 字节

选项 1(提供最佳性能)

125,000 字节

选项 2

2,500 字节脚注 1

选项 3

脚注 1

如果指定的计算器高速缓存大小小于 2,500 字节,则 Essbase 在计算期间不使用计算器高速缓存。计算性能可能会严重受损。

通过在计算脚本中使用 SET MSG SUMMARY 命令,可以检查 Essbase 能够使用的计算器高速缓存选项。在空多维数据集上运行以下计算脚本:

SET MSG SUMMARY;
CALC ALL;

Essbase 在应用程序日志中显示计算器高速缓存设置。请参见 SET Commands for Calc Testing and Statistics

您可以指定的最大计算器高速缓存大小为 200,000,000 字节。默认值为 200,000 字节。您选择的计算器高速缓存大小取决于可用内存和立方的配置。

注意:

如果计算更多基于聚合,而公式计算更少,计算器、索引、数据文件和数据高速缓存的大小通常会对性能产生更大的影响。

如果是首次计算多维数据集,则计算器高速缓存的大小特别重要。如果可能,请确保计算器高速缓存足够大,以便 Essbase 使用选项 1。

您可以使用默认计算器高速缓存大小,也可以在计算脚本中设置计算器高速缓存的大小。如果从计算脚本设置大小,则该设置仅用于计算脚本的持续时间。请参见计算脚本 SET CACHE 命令和 CALCCACHE 配置设置。

调整动态计算器缓存的大小

对于打开的每个多维数据集, Essbase 会为数据块在动态计算器高速缓存中分配一个区域。要确定是否有效使用动态计算器高速缓存,请查看应用程序日志和配置设置。

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

DYNCALCCACHEMAXSIZE 配置设置指定 Essbase 服务器上每个动态计算器高速缓存的最大大小。默认情况下,大小设置为 20 MB。Essbase 将在动态计算器高速缓存中为数据块分配区域,直到分配 DYNCALCACHEMAXSIZE 设置指定的最大内存区域。

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

[2024-07-27T16:43:52.707+00:00] ... [EXEC_TIME: 0.53] Regular extractor completed successfully
[2024-07-27T16:43:52.707+00:00] ... Regular Extractor Big Block Allocs -- Dyn.Calc.Cache : [30] non-Dyn.Calc.Cache : [0]

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

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

如果指定的最大大小是您所能承受的,并且如果使用计算器高速缓存外的内存来完成动态计算的检索,则会导致不可接受的延迟,请将 DYNCALCCACHEWAITFORBLK 设置为 TRUE。

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

更改动态计算器高速缓存大小

有五个与动态计算器高速缓存相关的配置设置。这些设置的最佳值取决于 Essbase Server 计算机上的内存、 Essbase 数据库的配置以及用户查询的性质。

以下每个配置设置的说明包括有关如何确定系统值的建议。为了满足您网站的独特要求,您可能需要测试和调整设置。

  • DYNCALCCACHEMAXSIZE :此设置指定 Essbase 可以分配给每个动态计算器高速缓存的最大大小。

    建议的设置值 = C * S * U。

    • C 是 Essbase 在计算一个块时需要修复(获取可寻址性)的最大块数的值。通常,值 100 是此值的良好近似值。如果要在公式计算中合并非常多的子代,则此数字可能会更高。

    • S 是 Essbase Server 计算机上的所有数据库中最大扩展块的大小。要计算扩展的块大小,请将每个密集维中的成员数(包括动态计算成员和动态时间序列成员)相乘以块中的单元格数,并将单元格数乘以每个成员单元格的大小(8 个字节)。

      例如,考虑 Sample.Basic 中密集维中的成员计数(不计算“仅标签”成员):

      • 19(年份,包含 12 个存储成员和 7 个动态计算成员,包括 HTD 和 QTD)

      • 14(度量,具有 8 个存储成员和 6 个动态计算成员)

      • 4(方案,包含 2 个存储成员和 2 个动态计算成员)

      S = 19 * 14 * 4 个单元(8 个字节/单元)= 每个块 8512 个字节

      此数字在应用程序日志中显示为逻辑块大小。

    • U 是数据库上具有最大并发用户数的最大预期并发用户数。

      将值 0(零)分配给 DYNCALCACHEMAXSIZE 将指示 Essbase 不使用动态计算器高速缓存。

      默认情况下,此值的大小为 20 MB(20,971,520 字节)。

  • DYNCALCCACHEWAITFORBLK :如果 Essbase 使用为动态计算器高速缓存分配的所有区域,则此设置会告知 Essbase 是否要等到高速缓存中的空间可用,还是要立即在高速缓存外部写入和计算内存中的块。如果高速缓存太小,则多个线程可能处于队列中。

    建议的设置值 = FALSE(默认值)。

    在设置为 TRUE 之前,请尝试以下替代方案:

    • 将物理内存添加到服务器计算机

    • 增加 DYNCALCCACHEMAXSIZE、test 和 repeat 的值,直到确认您不能再将任何内存用于动态计算器高速缓存。

  • DYNCALCCACHEBLKTIMEOUT :如果 Essbase 要等待动态计算器高速缓存中的可用空间,则此设置定义等待多长时间。

    建议的设置值 = WT/B。

    • WT 是查询的最大可容忍等待时间;例如,5 秒。

    • B 是最大查询中访问的逻辑块的总数。

      要确定 B 的值,请检查应用程序日志中查询的 Dyn.Calc.Cache "Big Block Allocs" 的最大数量的消息。

  • DYNCALCCACHEBLKRELEASE :如果 Essbase 已等待指定的时间和空间在动态计算器高速缓存中仍不可用,则此设置将告知 Essbase 是否立即在动态计算器高速缓存之外写入和计算块,或者通过交换块并临时压缩缓冲区中的交换块来创建空间。

    建议的设置值 = FALSE(默认值)。

    仅当遇到严重的内存短缺问题时,才设置为 TRUE。

  • DYNCALCCACHECOMPRBLKBUFSIZE :如果 Essbase 已等待指定的等待时间,并且 DYNCALCCEBLKRELEASE 设置为 TRUE,则此设置是动态计算器高速缓存压缩块缓冲区的大小。

    建议的设置值 = (C * S) / 2

    其中,C 是计算一个块时 Essbase 需要修复的最大块数(获取可寻址性)的值,S 是计算机上所有数据库中最大展开块的大小。计算 C 和 S 的方式与描述或 DYNCALCCACHEMAXSIZE 设置相同。