用于实现快速分析处理的混合模式
使用 Oracle Essbase 混合模式计算和查询处理器,您可以使用过程计算以及读取和写入建模执行实时分析。混合模式是在进行块存储查询时用于动态相关性分析的默认引擎。它不是使用计算脚本时的默认引擎(您可以启用它)。
如果您用过 Essbase 11g 内部部署,则可能会比较熟悉以下一种或多种多维数据集设计模式。这些模式是为了满足不同用途而定制的:
- 块存储:存在大型稀疏维时特别适用。处于这种模式的多维数据集会被存储并预先聚合,以实现良好的查询性能。包含一组丰富的用于分析的计算函数。
- 聚合存储:适用于具有大量维和许多高级别聚合的多维数据集。可以使用 MDX 指定成员公式。
- 混合模式:借助聚合存储的优势增强了块存储模式。
混合模式是 Essbase 21c 和 Essbase 19c 中用于对块存储多维数据集执行动态相关性分析的默认查询引擎。混合模式可以提供强大的相关性分析和快速聚合。如果查询成员与动态成员存在相关性,该模式可以出色地处理这类成员带来的复杂性。
Oracle 建议在分析应用程序中使用动态相关项(包括稀疏聚合)。您并不是只能有选择地对稀疏维实施动态计算(如在 Essbase 11g 内部部署中)。特别是,根据性能优化准则和测试,可能会建议使用稀疏动态聚合。
虽然混合模式是用于块存储多维数据集的默认查询处理器,但是,它不是执行计算脚本时使用的默认模式。如果计算脚本包含许多动态相关项,Oracle 建议您为计算脚本同时启用混合模式。要执行此操作,您可以通过在应用程序配置文件属性中打开 HYBRIDBSOINCALCSCRIPT 配置设置(或者使用 SET HYBRIDBSOINCALCSCRIPT 计算命令基于每个计算进行控制)。
大多数 Essbase 计算函数都在混合模式下运行。要查看混合模式支持的所有计算函数的列表和语法,以及少数几个例外,请参见 Functions Supported in Hybrid Mode 。混合模式支持使用 FIXPARALLEL 的并行计算,但不使用 CALCPARALLEL 进行并行计算。
有关配置不是默认设置的混合模式或者关闭它的语法,请参阅 ASODYNAMICAGGINBSO 。
本节主题:
混合模式的好处
使用 Essbase 混合模式多维数据集,您可以获得以下好处:跨稀疏维快速进行聚合,减少多维数据集大小,优化内存规模,灵活进行批量计算,以及使用强大的公式相关性分析。
混合模式结合了块存储 (BSO) 过程计算和回写功能,并具有聚合存储 (ASO) 的聚合性能。混合模式具有速度快的好处,因为该模式不再需要存储稀疏聚合。这进而减少了数据库大小和内存规模,并缩短了批量计算时间。需要考虑的部署事项也得到了简化,因为您不再需要考虑是使用块存储来应对大量 0 级计算,使用聚合存储来满足许多高级别的聚合,还是设计分区模型来按维轴拆分多维数据集以改善计算性能。
以下是混合模式有可能提高计算性能的一些方案:
-
块存储数据库具有不是 0 级的稀疏成员,这些成员按层次来计算(而不是通过计算脚本来计算)。
-
稀疏的动态计算父成员的子代超过 100 个。
-
您在空的聚合存储目标和块存储源之间使用透明分区。如果聚合存储目标上的公式是简单公式,且可转换为块存储公式语言,使用混合模式可在块存储上快速获得结果。
-
您在两个块存储数据库之间使用透明分区,需要考虑计算性能。
混合模式的另一个好处是没有大纲顺序相关性。您可以轻松定制解决顺序,而不是重新排列维顺序。
混合模式还允许您使用方案管理,使用工作流格式测试和建模假设数据,而无需添加存储要求。
比较混合模式、块存储和聚合存储
如果未启用混合模式,块存储算法在用于大型稀疏维时对动态计算成员存在限制。混合模式(和聚合存储)针对动态相关性分析进行了更多优化。了解主要差异可帮助您选择最适合 Essbase 应用程序的查询处理器类型。
如果未启用混合模式,则必须在块存储数据库中存储大型稀疏维;将它们设为动态将会导致查询或计算时出现太多块 I/O,从而影响性能。存储非常大的稀疏维会导致批聚合时间过长,以及随稀疏维的数量和大小增长而相应增大的数据库过大。但即便存在这些缺点,块存储依然凭借强大的功能而被广泛应用。
聚合存储专门用来支持包含更多、更大的维的大型数据库。与块存储不同,它不需要预先聚合大型稀疏维以实现良好的查询性能。键位于聚合存储数据库内核中,这有助于跨大量维数快速进行动态聚合。
尽管聚合存储具备所有这些优势,但仍有许多情况更适合使用块存储,例如,需要能够以任何粒度加载数据,频繁运行复杂的批分配,或者为全球财务实施货币转换。在这种情况以及许多其他情况下,混合模式可能是不错的解决方案。混合模式结合了块存储和聚合存储各自的最佳特性。在混合模式下,Essbase 可以:
-
发挥全过程计算的灵活性,即使在依靠动态稀疏维进行计算时。
-
在访问动态稀疏成员时使用混合引擎进行查询。对于无法通过这种方式进行处理的小部分查询,Essbase 将使用块存储计算流来满足请求。
-
如果将稀疏成员标记为动态,则具有以下好处:
- 不必进行预先聚合
-
改进了重建性能
-
改进了备份性能
-
减少了对磁盘空间的需求
-
由于混合模式涉及动态计算,因此您可以使用解析顺序来确定计算的顺序。
注意:
混合计算无论是由查询还是计算脚本驱动,都在一个临时内存空间中执行,它会使用一个公式高速缓存和聚合存储高速缓存。
主要差异
了解以下主要差异可以帮助您选择最适合应用程序的查询处理器类型。
| 要求 | 聚合存储 (ASO) | 块存储 (BSO) | 混合模式 |
|---|---|---|---|
|
针对在许多稀疏维之间进行快速聚合进行了优化 |
是 |
无 |
是 |
|
针对尽量减少磁盘空间使用量以及缩短备份时间进行了优化 |
是 |
无 |
是 |
|
针对财务应用程序进行了优化 |
无 |
是 |
是 |
|
能够执行分配 |
是 |
是 |
是 |
|
能够执行批量计算 |
无 |
是 |
是 |
|
支持成员公式 |
是,表示为 MDX |
是,表示为 Essbase 计算函数 |
是,表示为 Essbase 计算函数 |
|
针对成员公式中的向前引用进行了优化 |
无 |
无 |
是 |
|
能够定制计算/聚合的解析顺序 |
是 |
无 |
是 |
|
能够指定自下而上的查询执行,以提高小型输入数据集的相关性分析速度 |
无 |
无 |
是 |
|
能够跟踪和调试查询执行 |
是 |
无 |
是 |
|
能够限制一个查询允许使用的内存 |
是 |
无 |
是 |
|
支持两遍计算 |
无 |
是 |
无 |
|
能够在任何级别加载数据 |
否。只能加载没有公式相关项的 0 级单元格 |
是 |
是 — 存储层 否 — 动态级别 |
|
能够使用缓冲区以增量方式加载数据 |
是 |
无 |
无 |
|
公式应用于稀疏维的求值结果与应用于密集维的求值结果可能有所不同。 |
不适用 |
是。在未启用混合模式的块存储上,可以迭代方式编写 Essbase 计算脚本,以解决稀疏块的相关项问题。如果将维类型从稀疏更改为密集或反之,相同的公式可能会得到不同的结果。 |
否。公式相关项的计算结果相同,与稀疏或密集无关。 在混合模式下,Essbase 使用算法解决动态相关项问题。在某些情况下,在混合模式下通过计算脚本获得的数据与未启用混合的块存储模式下获得的数据可能不同。 |
开始使用混合模式
要以混合模式开始运行 Essbase 应用程序,请从测试环境中开始,使大型稀疏维成为动态维,并研究应用程序日志。
要开始使用混合模式,请遵循以下准则:
-
设置开发环境,将现有的块存储应用程序迁移到开发环境。对于块存储多维数据集,在默认情况下会启用混合模式。
-
如有可能,请将较大的稀疏维设置为动态维。
-
在启用混合模式之前和之后均运行测试查询并检查应用程序日志。此活动可以显示聚合存储查询处理器的使用程度,以及从混合模式获得的好处。对于每个查询,应用程序日志的状态为
Hybrid aggregation mode enabled或Hybrid aggregation mode disabled. -
如果针对太多的查询记录了“混合模式已禁用”,请与 Oracle 技术支持联系。
针对混合模式优化多维数据集
要最有效地使用混合模式,请执行以下操作:
-
避免在混合模式下使用两遍计算。请改用解析顺序。
-
只要可行,应将非 0 级存储的成员转换为动态计算成员。
-
如果转换为动态计算成员会影响相关公式的解析顺序,您可能需要调整大纲的维顺序,使解析顺序与以前的批量计算顺序和两遍计算设置一致。
混合模式多维数据集的默认解析顺序与块存储多维数据集的计算顺序相似,但前者比后者有所增强。如果您希望使用非默认解析顺序,则可以为维和成员设置定制解析顺序。
-
以错误的解析顺序处理的动态计算公式可能会导致查询执行太多公式,从而降低性能。如果可能,动态计算的稀疏公式应该比按层次聚合的稀疏维具有更高的解析顺序。
在某些应用程序中,这无法实现,因为需要不同的解析顺序才能获得正确的公式结果。例如,具有单位和价格的应用程序需要在稀疏聚合之前执行销售额值,以便在较高级别获得正确的销售额值。
-
您可能需要调整维的密集或稀疏配置(仅适用于无法使用混合引擎的情况下的块存储引擎利用率)。
-
尽可能减小块的大小。
Essbase 管理员可以使用以下工具在混合模式下监视和优化查询性能:
-
要限制任何单个查询可能使用的内存量,请使用 MAXFORMULACACHESIZE 配置设置。
-
如果多维数据集的复杂成员公式具有交叉维运算符和多个 IF/ELSE 语句,则性能问题可能与公式执行有关。如果怀疑存在这种情况,您可以为公式计算激活自下而上的查询处理。这样可通过标识计算所需的交集来优化查询时间,使查询时间与输入数据大小成比例。
要对发行版 21C 进行这些查询优化,请使用 QUERYBOTTOMUP 配置设置以及 @QUERYBOTTOMUP 计算函数。对于发行版 19C,将 IGNORECONSTANTS 配置设置与 BOTTOMUP 语法以及 @NONEMPTYTUPLE 计算函数结合使用。
-
使用查询跟踪来监视和调试查询性能。根据您的用例,可以使用多个应用程序级别配置设置。对您认为可能存在问题的单个查询使用 QUERYTRACE 进行短期调试。将 TRACE_REPORT 用于对并发运行的查询的统计信息收集(非常适合在开发环境中调试)。在生产环境中使用 LONGQUERYTIMETHRESHOLD 将运行的时间超过设置时间的任何查询的统计信息打印到应用程序日志文件中。
混合模式的限制和例外
在某些情况下,查询在混合模式下无法以最佳方式执行。Essbase 可以检测这些情况并在块存储模式下聚合它们。如果某个查询混用了受支持和不受支持的混合模式计算类型,则 Essbase 将默认执行块存储计算。
如果启用了混合模式,将对使用支持的函数的成员公式生效。有关受支持和不受支持的函数的列表,请参见 Functions Supported in Hybrid Mode 。
以下类型的查询无法在混合模式下执行:
-
带有公式的动态计算成员(是透明分区的目标)
-
查询中共享成员在目标分区定义之外,而原型成员在定义之内,或者相反
-
XOLAP
-
文本度量/文本列表
属性计算将在混合模式下执行,仅用于求和。
如果相关成员的解决顺序高于公式成员,将显示以下警告:
Solve order conflict - dependent member member_name with higher solve order will not contribute value for formula of member_name混合模式下的解析顺序
Essbase 中的解析顺序确定在混合模式下执行动态计算的顺序。您可以定制解析顺序,也可以接受默认解析顺序,默认解析顺序已针对高性能和相关性分析进行了优化。
解析顺序的概念适用于动态计算执行,无论该计算是由动态成员公式还是计算脚本中的动态相关性启动。在多维查询中对某个单元格求值时,解析计算的顺序可能不明确,除非指定了解析顺序以指明所需的计算优先级。
您可以设置维或成员的解析顺序,也可以使用默认的 Essbase 解析顺序。您可以设置的最小解析顺序为 0,最大解析顺序为 127。解析顺序值越大,对相应成员的计算就越晚;例如,解析顺序为 1 的成员先解析,解析顺序为 2 的成员后解析。
启用混合模式后,默认解析顺序(也称为计算顺序)与块存储数据库的该顺序几乎一致:
| 维/成员类型 | 默认解析顺序值 |
|---|---|
| 存储的成员 | 0 |
| 稀疏维成员 | 10 |
| 密集账户维成员 | 30 |
| 密集时间维成员 | 40 |
| 密集常规维成员 | 50 |
| 属性维成员 | 90 |
| 两遍动态成员 | 100 |
| MDX 计算成员或命名集(已在 MDX 中定义) | 120 |
总之,混合模式下的默认解析顺序规定,先计算存储的成员,再计算动态计算成员;先计算稀疏成员,再计算密集成员;各自按照大纲中的显示顺序(从上到下)进行计算。
没有为其指定解析顺序的动态成员(带或不带公式)继承其维的解析顺序,除非它们被标记为两遍。
两遍计算是块存储模式下可以应用的一项设置,适用于带有必须计算两遍才能生成正确值的公式的成员。
注意:
请勿对混合模式多维数据集使用两遍计算。仅使用解决顺序。
两遍计算在混合模式下不适用,标记为两遍的所有成员将在属性之后最后才计算。在混合模式下,如果默认解析顺序不符合需求,应实施定制解析顺序,而非两遍计算。
混合模式下的默认解析顺序针对以下方案进行了优化:
-
向前引用,其中的动态成员公式引用了按大纲顺序稍后才会出现的成员。混合模式下没有大纲顺序相关性。
-
基于大纲顺序对子值聚合更接近使用等效公式进行聚合。
-
动态密集成员是稀疏公式内的相关项。在混合模式下,如果稀疏公式引用了密集动态成员,该引用将会被忽略,因为系统会先计算稀疏维。要更改这种情况,请给稀疏维分配一个比密集维的解析顺序更高(更晚计算)的解析顺序值。
定制解析顺序
如果您需要调整混合模式下动态计算的行为,可以通过定制维和成员的解析顺序来实现此目标,并且无需对大纲进行重大更改。
如果实施定制解析顺序,它将覆盖默认解析顺序。如果成员或维具有相同的解析顺序,则采用它们出现在大纲中的顺序(从上到下)来解决冲突。
除非为特定成员定制解析顺序,否则顶级维成员的解析顺序应用于维中的所有动态成员。
要更改解析顺序,可在 Essbase Web 界面中使用大纲编辑器,或者使用 Smart View (请参见 Changing the Solve Order of a Selected POV )。
您可以设置的最小解析顺序为 0,最大解析顺序为 127。解析顺序值越高意味着计算相应成员的时间越晚。
要探索解析顺序的用例,请参见应用程序工作薄库的 "Technical" 部分中的解析顺序模板。该库位于 Essbase 中的文件目录。
有关非混合模式下解析顺序的说明
在聚合存储多维数据集中:
-
所有维的解析顺序都设置为 0。
-
聚合以大纲顺序执行,以下情况除外:
- 首先处理存储的层次成员。
- 然后处理动态层次成员。
在非混合块存储多维数据集中,默认解析顺序如下
-
先稀疏,后密集
-
先账户,后时间
-
属性排在最后
注意:
如果手动将账户成员的解析顺序设置为高于时间成员的解析顺序,则将在动态时间序列成员之后对账户成员求值。