透明分段

Essbase 中的透明分区允许用户像是本地多维数据集的一部分一样操作远程存储的数据。每次目标多维数据集的用户请求远程数据时,都会从源多维数据集检索远程数据。

在目标多维数据集上工作的用户不需要知道数据的存储位置,因为他们访问数据就好像它是本地多维数据集的一部分一样。

图 9-5 透明分区


此图说明了透明分区数据目标的用户如何看到来自三个数据源的数据。

由于数据是直接从数据源检索的,因此用户可以访问最新版本。当他们更新数据时,他们的更新会写回数据源。此过程意味着数据源和数据目标中的其他用户可以立即访问这些更新。

通过透明分区,数据源和数据目标的用户可能会发现性能降低,因为越来越多的用户访问源数据。

例如,TBC 的 DBA 可以使用透明分区在单独的计算机上计算方案维的每个成员。此处理可缩短计算所用时间,同时为用户提供相同的数据视图。

使用透明分区实现以下目标:

  • 向用户显示最新版本的数据

  • 允许数据目标中的用户更新数据

  • 最大限度地减少磁盘空间占用

创建透明分区时,目标多维数据集中的数据分片将清除为 #MISSING,因为数据应存储在源多维数据集上。即使您删除了分区,也会将其清除。

透明分区规则

透明分区必须遵循以下规则:

  • 数据存储在源多维数据集中。目标多维数据集不存储或管理任何数据,而是充当访问点。如果启用了写入访问权限,则访问目标多维数据集的用户可以更新源多维数据集中的数据。

  • 当源和目标都是聚合存储 (ASO) 多维数据集时,不支持将数据从目标多维数据集合并到源多维数据集。

  • 数据源和数据目标轮廓的共享透明区域不必相同,但必须能够映射其中的维。您必须告知 Essbase 数据源中的每个维和成员如何映射到数据目标中的每个维和成员。

  • 非共享区域的数据源和数据目标大纲不需要可映射,但属性关联必须相同。否则,用户可能会获得不正确的某些检索结果。例如,如果产品 100-10-1010 与源上的“葡萄风味”属性关联,但产品 100-10-1010 与目标上的“葡萄”不关联,则纽约所有“葡萄”风味的销售总额不正确。

  • 分区定义只能包含存储的成员。不能使用属性维或成员来定义透明分区。例如,与“市场”维关联的“市场类型”属性维具有成员“城市”、“郊区”和“农村”。不能在“城市”、“郊区”或“农村”上定义分区。

  • 如果将某个单元从数据源映射到作为目标的聚合存储数据库,则该单元的所有从属项也必须映射到同一分区定义。

  • 可以在复制的分区上创建透明分区。换句话说,您可以使用复制的分区源创建透明分区目标,如下图所示:

    图 9-6 有效透明分区


    此图说明了透明分区目标如何包含来自透明或复制的分区源的数据。
  • 如下图所示,无法在多个其他分区之上创建透明分区。换句话说,您无法从多个源创建透明分区目标,因为数据库中的每个单元只能从一个位置(本地磁盘或远程磁盘)进行检索。

    图 9-7 无效的透明分区


    此图说明了透明分区如何仅包含来自一个分区源的数据。
  • 请仔细考虑为数据源和数据目标中的成员分配的任何公式。

透明分区的优点

透明分区可以解决许多数据库问题,但透明分区并不总是理想的分区类型。

您需要的磁盘空间更少,因为要将数据存储在一个数据库中。

从数据目标访问的数据始终为最新版本。

当用户更新数据源中的数据时, Essbase 会对数据目标进行这些更改。

单个数据库较小,因此可以更快地计算它们。

最终用户和最终用户的工具看不见数据的分发。

可以从数据源或数据目标加载数据。

透明分区的缺点

如果以下缺点太严重,请考虑改用复制分区或联合分区。

透明分区可增加网络活动,从而缩短用户的检索时间。

由于越来越多的用户正在访问源数据,因此检索时间可能会变慢。

如果源多维数据集失败,则源和目标的用户都会受到影响。因此,只要连接到源或目标的用户需要它们,网络和源多维数据集就必须可用。

只能对本地数据执行某些管理操作。例如,如果归档目标多维数据集,则 Essbase 仅归档目标多维数据集,而不归档源多维数据集。以下管理操作仅对块存储数据库中的本地数据起作用:

  • CLEARDATA 计算命令

  • DATACOPY 计算命令

  • EXPORT 命令

  • VALIDATE 命令

  • BEGINARCHIVE 和 ENDARCHIVE 命令

对透明分区执行计算时, Essbase 会使用本地数据和透明相关项的当前值执行计算。Essbase 不会重新计算透明相关项,因为源和目标的大纲可能如此不同,以至于此类计算不准确。要计算所有分区,请针对每个分区发出 CALC ALL 命令,然后在顶层使用每个分区的新值执行 CALC ALL 命令。

考虑这样一个示例,其中:

  • 目标多维数据集的大纲包含具有东部、西部、南部和中部成员的市场维

  • 源多维数据集的大纲包含具有 New York 和 New Jersey 成员的一个 East 维

如果尝试计算目标多维数据集,则假定 East 是 0 级成员。但是,在源多维数据集中,East 是通过添加 New York 和 New Jersey 来派生的。但是,对目标进行的任何计算都不会知道这些信息,并且无法反映来源中对纽约和 New Jersey 所做的更改。因此,要执行准确的计算,请在源中计算 East,然后计算目标。

分配给源多维数据集中的成员的公式可能会生成与目标多维数据集中定义的公式或合并不一致的计算结果,反之亦然。

透明分区的性能注意事项

要提高透明分区的性能,请在创建分区时考虑以下准则:

  • 沿密集维进行分区会大大降低性能,因为密集维用于确定数据块的结构和内容。

    为了提高性能,请考虑在区域定义中包括一个或多个稀疏维,以便所需的块数仅限于与稀疏成员的组合。

  • 基于维的属性值建立透明分区可以增加检索时间,因为属性与稀疏维关联。在这种情况下,在高于与属性关联的级别进行分区可以缩短检索时间。例如,在 Sample.Basic 数据库的 Product 维中,如果子代 100-10、200-10 和 300-10(级别 0)与属性关联,则对其父代 100、200 和 300(级别 1)进行分区以获得更好的检索性能。

  • 将数据从目标多维数据集加载到源多维数据集可能会大大降低性能。如果可能,将数据加载到本地数据源中。

  • 检索时间较慢,因为用户通过网络访问数据。

  • 当透明分区是目标时,请考虑使用以下配置设置:

    • 对于从源多维数据集发送到透明分区目标多维数据集的请求,可以使用 ENABLE_DIAG_TRANSPARENT_PARTITION 配置设置记录事务处理响应时间。对太慢的响应时间进行故障排除时,记录这些消息很有帮助。

    • 当透明分区目标为聚合存储 (ASO) 多维数据集时,可以使用 MAX_REQUEST_GRID_SIZEMAX_RESPONSE_GRID_SIZE 配置设置指定请求网格和响应网格的最大大小。

  • 对基本维进行分区会大大降低性能。

透明分区的计算

在计算依赖于远程数据的本地数据时, Essbase 必须使用自下而上的计算。确保您在目标多维数据集上使用优化的计算器高速缓存。请参阅 Size the Calculator Cache

对透明分区执行计算时, Essbase 会使用本地数据和透明相关项的当前值执行计算。在计算依赖于远程数据的本地数据时, Essbase 会执行自下而上的计算。只有在正确使用目标数据库上的计算器高速缓存时,才能执行自下而上的计算。请参阅自下而上和自上而下计算

增加分配给计算器高速缓存的内存可以大大提高透明分区的计算性能。启动计算时,应用程序日志文件中的消息将指示在目标数据库上是启用还是禁用计算器高速缓存。在目标数据库上使用计算器高速缓存可以减少计算期间从数据源请求的块数。反过来,减少请求的块会减少通过在网络中传输块而产生的网络流量。

透明分区计算性能

Essbase 在计算之前必须从源检索整个网络中的相关块时,计算透明分区目标上的数据可能会降低性能。要优化透明计算,请使用动态计算,管理计算器高速缓存,避免自上而下公式,并避免在区域定义成员上使用复杂的公式。

如果 Essbase 必须对包含自上而下成员公式的数据目标的任何部分执行自上而下的计算,则具有透明计算的性能也会降低。如果数据目标不包含自上而下的成员公式,则 Essbase 可以对数据目标执行自下而上的计算,速度要快得多。

Essbase 对源多维数据集执行计算时,它始终可以执行自下而上的计算。

请考虑使用以下计算替代方案:

  • 如果绝对确定目标分区计算脚本不涉及对远程数据的访问,则可以在计算脚本中使用 SET REMOTECALC OFF 计算命令停止从源分区检索工作。

  • 动态计算成员实施为透明数据的父代,以便在检索数据时实时计算数据。此处理可缩短批处理时间。Essbase 仅在用户请求计算时执行计算。

  • 在低层透明数据和高层本地数据之间实施复制层。

考虑以下绩效策略:

  • 将分区完全保留在计算器高速缓存区域内,这意味着分区定义中的任何稀疏成员都必须包含在计算器高速缓存中。例如,在示例基本多维数据集中,如果分区定义包括 @IDESC(East),则 East 的所有后代都必须位于计算器高速缓存中。

  • 启用计算器高速缓存,并为其分配足够的内存量。

  • 请勿对定义分区的任何成员使用复杂的公式。例如,在 Sample Basic 中将复杂公式分配给 New York 或 New Jersey(两者都是 East 的子代)会强制 Essbase 使用自上而下的计算方法。

透明分区和成员公式

如果除不同的成员公式外,数据目标和数据源大纲相同,请确保分区定义生成所需的计算结果。

例如,假设数据源和数据目标大纲都包含“市场”维,其中包含“北方”和“南方”成员以及“北方”和“南方”子代。在数据目标上,Market 是根据数据源上南北成员(及其子代)的数据计算的。如果数据源中的任一成员包含成员公式,则会计算这些公式,从而影响数据目标上市场的计算值。这些结果可能与“市场”成员的计算方式与数据目标上可能不存在这些公式的“南北”成员不同。

确保为数据源和数据目标中的成员分配的任何公式都会生成所需的结果。

透明分区和端口使用

每个唯一用户和计算机组合都使用一个端口。如果用户在一个服务器上使用相同的用户名定义了多个透明分区,则仅占用一个端口。

在透明分区中,当用户 (user1) 钻取到目标中访问源数据的区域时,user1 使用在分区定义中声明的用户名(分区用户)从源数据库访问数据。此访问会导致使用其他端口,因为不同的用户(user1 和 partition 用户)正在连接到应用程序。

如果第二个用户 (user2) 连接到目标数据库并向下钻取以访问源数据,则 user2 还使用在分区定义中声明的用户名(分区用户)。由于分区用户已连接到源数据库,因此只要 user2 正在访问同一源数据库,分区用户就不需要额外的端口。