CALCPARALLEL 并行计算
要从 Essbase 默认序列计算更改为 CALCPARALLEL 并行计算,请更改一个或两个配置设置并重新启动服务器,或向计算脚本添加指令。
有关说明,请参阅启用 CALCPARALLEL 并行计算。
下面的主题将讨论并行计算的详细信息。
CALPARALLEL 的可行性分析
Essbase 将评估在您为其启用的每次计算通过之前是否可以使用 CALPARALLEL 并行计算方法。
Essbase 分析大纲以及为每次计算传递请求的计算。请记住,一次计算可能需要多次通过。在某些情况下,可能需要多次传递,包括动态计算、标记为双传递的成员是否存在,或创建特定种类的相互依赖性的计算。请参阅计算通过。
如果 Essbase 确定可以使用 CALPARALLEL 方法进行并行计算,则 Essbase 会将计算拆分为相互独立的较小任务。在计算过程中, Essbase 会同时执行较小的任务。
但是,如果参与传递的公式之间存在复杂的相互依赖性,则 Essbase 会采用序列计算。这种相互依赖性会使并行计算变得不可能。
考虑 FIXPARALLEL 方法是否更适合您的用例。请参见 FIXPARALLEL Parallel Calculation 。
CALCPARALLEL 并行计算准则
Essbase 大纲结构和应用程序设计确定启用并行计算是否可以提高计算性能。在启用 CALCPARALLEL 样式的并行计算之前,请查看以下准则,这将帮助您获得全部优势。
-
计算中存在的一个或多个公式可能会阻止 Essbase 使用 CALCPARALLEL 并行计算(即使已启用)。有关可能强制执行序列计算的公式的说明,而不考虑并行计算设置,请参阅 CALCPARALLEL 并行计算与其他 Essbase 功能之间的关系。
-
计算任务是沿大纲的最后 n 个稀疏维生成的。这些用于标识任务的稀疏维称为任务维。任务维数 n 可由 Essbase 动态选择,也可以通过为计算命令 SET CALCTASKDIMS (或应用程序配置设置 CALCTASKDIMS )指定值来覆盖该数字。
根据维的实际大小(如 MaxL 语句 query database DBS-NAME get dbstats dimension 所报告的那样),对大纲中的稀疏维从小到大进行排序。此排序建议与优化计算器高速缓存大小的建议一致,并且与其他大纲建议一致。有关可能需要使用附加维(超过最后一个稀疏维)的情况的说明,以及有关如何增加所用稀疏维数的说明,请参阅确定其他并行计算任务。
-
CALCPARALLEL 并行计算对非分区应用程序和这些分区应用程序有效:
-
复制的分区
-
如果计算发生在目标数据库中,则为透明分区。SET CALCTASKDIMS 在计算脚本中指定的稀疏维数必须设置为 1。有关将并行计算与透明分区一起使用所施加的限制的信息,请参见 Relationship Between CALCPARALLEL Parallel Calculation and Other Essbase Features ;有关使用 SET CALCTASKDIMS 的信息,请参见 Identify Additional Tasks for Parallel Calculation 。
-
-
与 MDX 查询或报告脚本相比,更新事务(如计算和数据更新)更耗费资源。
CALCPARALLEL 并行计算与其他 Essbase 功能之间的关系
如果在 Essbase 多维数据集中使用 CALCPARALLEL 并行计算,请考虑与检索性能、公式、计算器高速缓存位图和透明分区相关的限制。
检索性能
将最大的稀疏维放在大纲的末尾,以获得最大的并行计算性能可能会降低检索性能。
公式限制
存在某些公式可能会强制执行序列计算。以下公式放置可能会强制执行序列计算:
-
密集成员(包括存储的所有成员和存储成员可能依赖的任何动态计算成员)上的公式,会导致对维的成员的依赖,该成员用于标识并行计算的任务。
-
包含对使用 @VAR、@ARRAY、@XREF 或 @XWRITE 的计算脚本中声明的变量的引用。请考虑使用 FIXPARALLEL 进行并行计算。
-
使用 @XREF 的稀疏维成员公式,并且完全计算稀疏成员的维。@XREF 在密集的动态计算成员上不依赖于批计算期间的其他存储成员时,不会强制执行序列计算。
-
导致循环依赖的成员公式。例如,成员 A 具有引用成员 B 的公式,成员 B 具有引用成员 C 的公式,成员 C 具有引用成员 A 的公式。
-
密集或稀疏成员的公式,该公式依赖于维中的成员或成员,用于标识并行处理的任务。
-
稀疏维成员公式,包含对来自其他稀疏维的成员的引用。
如果需要使用可能阻止并行计算的公式,请考虑使用 FIXPARALLEL。否则,可以将公式的成员标记为“动态计算”,或者将公式从计算范围中排除。要查看公式是否阻止并行计算,请检查应用程序日志。有关错误消息,请参见 Monitor CALCPARALLEL Parallel Calculation 。
计算器缓存
在计算传递开始时, Essbase 会检查计算器高速缓存大小和并行度,然后使用适用于最大性能的计算器高速缓存位图选项。因此,用于并行计算的位图选项可能与用于串行计算的位图选项不同。
例如,假设 Essbase 执行序列计算并使用多个位图和单个锚定维。如果不显式更改计算器高速缓存大小, Essbase 可能会仅使用单个位图和单个锚定维执行并行计算。
您可以通过在每个计算通过开始时检查应用程序日志来确定控制位图选项的计算器高速缓存模式,该日志针对类似于以下内容的条目:
Multiple bitmap mode calculator cache memory usage has a limit of [50000] bitmaps.在多个位图模式下使用并行计算时,可能会遇到高内存使用量。如果是,则可以使用配置设置 PARCALCMULTIPLEBITMAPMEMOPT 来优化多位图模式下的内存使用。此设置可以与 MULTIPLEBITMAPMEMCHECK 一起使用,也可以单独使用。要启用 PARCALCMULTIPLEBITMAPMEMOPT,请将以下内容添加到您的应用程序配置:
PARCALCMULTIPLEBITMAPMEMOPT TRUE透明分区限制
具有透明分区的并行计算具有以下限制:
-
除非在目标上进行计算,否则不能跨透明分区使用并行计算。
-
您必须将任务维设置为 1。为此,请使用 SET CALCTASKDIMS 计算命令或 CALCTASKDIMS 配置设置。
-
您必须增加计算器高速缓存,以便可以使用多个位图。您可以通过在每个计算通过开始时检查应用程序日志来确定控制位图选项的计算器高速缓存模式,该日志针对类似于以下内容的条目:
Multiple bitmap mode calculator cache memory usage has a limit of [50000] bitmaps.
检查当前 CALCPARALLEL 设置
您可以检查应用程序配置或计划用于查看是否为 Essbase 多维数据集启用了 CALCPARALLEL 样式并行计算的计算脚本。
要检查是否已在应用程序级别启用 CALCPARALLEL 样式并行计算,请搜索配置参数 CALCPARALLEL 并检查其指定值。
或者,多维数据集(或计算脚本)可以使用 FIXPARALLEL 命令块进行并行计算。
对于 CALCPARALLEL,可以同时执行任务以完成计算的线程数由介于 1 和 128 之间的值指定。在 64 位平台上运行的块存储 (BSO) 和聚合存储 (ASO) 数据库支持多达 128 个线程。
要检查计算脚本是否设置 CALCPARALLEL 样式并行计算,请查找 SET CALCPARALLEL 命令。请仔细查看该脚本,因为该脚本可能会多次启用或禁用并行计算。
启用 CALCPARALLEL 并行计算
要将 CALCPARALLEL 样式的并行计算与 Essbase 多维数据集一起使用,您可以为应用程序启用它,也可以仅为一个或多个计算脚本实施它。
要将 CALCPARALLEL 并行计算与 Essbase 多维数据集一起使用,请使用以下任一方法:
-
添加或编辑应用程序配置设置 CALCPARALLEL 和 CALCTASKDIMS 。
-
在计算脚本中使用 SET CALCPARALLEL 和 SET CALCTASKDIMS 计算命令。
按照以下工作流启用 CALCPARALLEL 样式的并行计算:
提示:
如果站点需要,您可以组合使用 CALCPARALLEL 和 SET CALCPARALLEL。例如,可以在服务器级别将 CALCPARALLEL 设置为关闭,并根据需要使用计算脚本启用和禁用并行计算。
确定并行计算的其他任务
默认情况下, Essbase 使用迭代技术来选择要用于 CALCPARALLEL 样式并行计算的任务维的最佳数量。
例如,如果在最后一个稀疏维的成员上有一个 FIX 语句,则也可以从大纲中包括下一个到最后一个稀疏维。由于这两个维的每个唯一成员组合都标识为潜在任务,因此会创建越来越多的较小任务,从而增加并行处理和改进负载平衡的机会。
要指定并行计算的任务维数,请执行以下操作:
- 如果您不确定,请使用检查当前 CALCPARALLEL 设置中介绍的流程验证是否启用了并行计算。如果未启用 CALCPARALLEL (或计算脚本中使用的 SET CALCPARALLEL ), CALCTASKDIMS 将不起作用。
- 可选:Essbase 选择用于并行计算的任务维的默认编号 n,并且此编号作为信息性消息打印在应用程序日志文件中;例如:
Parallelizing using [2] task dimensions。要覆盖默认的 n 设置,请为应用程序添加或修改 CALCTASKDIMS 配置设置,或使用计算脚本命令 SET CALCTASKDIMS 。 - 运行计算脚本。
在某些情况下, Essbase 使用的维数少于 CALCTASKDIMS 或 SET CALCTASKDIMS 指定的维数。
使用日志消息优化 CALCPARALLEL
仔细分析日志消息可帮助您优化 Essbase 将并行计算流程分解为任务的方式。
如果使用的是 CALCPARALLEL 并行计算,则可能会遇到以下日志消息:
Current selection of task dimensions [n] will generate insufficient number of tasks [n] for parallel calculation. See whether calculation time can be improved by increasing the number of task dimensions by one (see SET CALCTASKDIMS topic in the documentation). Also, consider using FIXPARALLEL to make custom task selections that are different from CALCPARALLEL.
如果遇到此消息,则意味着在并行计算期间, Essbase 不会增加任务维数,以防导致任务变得太小。当任务变得太小时,计算调度开销可能会超过并行性的好处。但是,当任务太大时,并行计算线程可能没有足够的任务可以处理。
如果下一个潜在任务维不是第一个稀疏维,请考虑使用 SET CALCTASKDIMS 计算命令(或 CALCTASKDIMS 配置设置)将任务维数增加 1,并观察这是否提高了计算速度。另外,请考虑使用 FIXPARALLEL 进行不同于 CALCPARALLEL 的定制任务选择(请参见 FIXPARALLEL Parallel Calculation )。
Current number of task dimensions [n] for parallel calculation might have caused too many tasks [n] to be generated. See whether calculation time can be improved by decreasing the number of task dimensions by one (see SET CALCTASKDIMS topic in the documentation). Also, consider using FIXPARALLEL to make custom task selections that are different from CALCPARALLEL.
对于并行计算,具有足够数量的任务有助于减少数据偏差的影响。但是,过多的任务(即使是大小合适的任务)可能会导致排程开销超过收益。Essbase 针对一个最佳范围。如果看到上述消息,则意味着 Essbase 尝试通过添加一个任务维来满足建议的最小任务数;这样做,可能会跨越任务计数的上限。
如果 Essbase 选择的最后一个任务维不是唯一的任务维,请考虑使用 SET CALCTASKDIMS 计算命令(或 CALCTASKDIMS 配置设置)将任务维减少一个,并观察这是否可以提高计算速度。或者,考虑使用 FIXPARALLEL 进行不同于 CALCPARALLEL 的定制任务选择。
监控 CALCPARALLEL 并行计算
您可以在应用程序日志中查看与并行计算相关的事件。对于每次计算传递, Essbase 会将多种类型的信息写入应用程序日志以支持并行计算。
当可以使用并行计算时
如果启用了并行计算,并且 Essbase 已确定可以执行并行计算,则 Essbase 将在应用程序日志中写入一条消息:
Calculating in parallel with n threadsn 表示在 CALCPARALLEL 或 SET CALCPARALLEL 中指定的并发任务数。
由于公式而无法使用并行计算时
对于阻止并行计算的每个公式(强制执行序列计算), Essbase 会向应用程序日志中写入一条消息:
Formula on (or backward dependence from) mbr memberName prevents calculation from running in parallel.memberName 表示存在相关公式的成员的名称。您可以在应用程序日志中查看此类消息,并考虑删除公式,或者如果可能,将相关成员或成员标记为动态计算,以便它们在计算传递中不具有功能。
Essbase 会向应用程序日志中写入一条消息,指定可以同时执行的任务数(基于数据,而不是 CALCPARALLEL 或 SET CALCPARALLEL 的值):
Calculation task schedule [576,35,14,3,2,1]上面的示例消息指示可以同时执行 576 个任务。576 个任务完成后,可以同时执行 35 个任务,依此类推。
在前几个步骤中,并行计算的好处最大,并且由于执行的并发任务较少而减少。
并行程度取决于任务计划中的任务数。数字越大,可以并行运行的任务就越多,性能提升就越大。
空任务中出现并行计算结果时
Essbase 会向应用程序日志文件写入一条消息,指示有多少任务为空(不包含任何计算):
Info(1012681) Empty tasks [291,1,0,0,0,0]在上例中, Essbase 指示 0 级任务中有 291 个为空。
如果空任务与计算任务计划中指定的任务的比率大于 50%(例如,291/576),则由于数据模型中的稀疏性很高,并行性可能无法提高性能。
您可以更改密集稀疏分配,以减少空任务数并增加并行计算的性能提升。