分区 - 分区存储模式和处理
适用于: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
分区的存储模式影响分区及其父度量值组和多维数据集的查询和处理性能、存储要求以及存储位置。 存储模式的选择也会影响处理选择。
分区可以使用下列三种基本存储模式之一:
多维 OLAP (MOLAP)
关系 OLAP (ROLAP)
混合 OLAP (HOLAP)
Microsoft SQL Server SQL Server Analysis Services 支持所有三种基本存储模式。 它还支持主动缓存,使用主动缓存,您可以组合 ROLAP 和 MOLAP 存储的特征,从而满足数据的即时性和查询性能的要求。 有关详细信息,请参阅 主动缓存 (分区) 。
MOLAP
MOLAP 存储模式会导致分区的聚合及其源数据的副本存储在多维结构中,SQL Server Analysis Services处理分区时。 此 MOLAP 结构在得到高度优化后,可以最大程度地提高查询性能。 存储位置可以位于定义分区的计算机或运行SQL Server Analysis Services的另一台计算机上。 由于源数据副本位于多维结构中,因此,可以在不访问分区源数据的情况下直接解析查询。 使用聚合可以显著缩短查询响应时间。 分区 MOLAP 结构中的数据与分区的最新处理完全保持同步。
随着源数据的更改,MOLAP 存储中的对象必须定期处理以合并这些更改并使其可供用户使用。 处理会完全更新或增量更新 MOLAP 结构中的数据。 两次处理之间的时间将构成滞后时间,在此期间,OLAP 对象中的数据可能无法与源数据相匹配。 您可以增量更新或完全更新 MOLAP 存储中的对象,而无需使分区或多维数据集脱机。 但是,在某些情况下可能需要使多维数据集脱机以处理对 OLAP 对象所做的特定结构更改。 您可以通过更新和处理临时服务器上的多维数据集以及使用数据库同步将已处理的对象复制到生成服务器,最小化更新 MOLAP 存储所需的中断时间。 还可以使用主动缓存,在保留 MOLAP 存储的大多数性能优点的同时最小化滞后时间,并最大化可用性。 有关详细信息,请参阅 主动缓存 (分区) 、 同步 Analysis Services 数据库和 处理多维模型 (Analysis Services) 。
ROLAP
在 ROLAP 存储模式下,分区的聚合将存储在关系数据库(在分区数据源中指定)的索引视图中。 与 MOLAP 存储模式不同,ROLAP 不会导致源数据的副本存储在SQL Server Analysis Services数据文件夹中。 当不能从查询缓存中获得结果时,则会访问数据源中的索引视图以回答查询。 使用 ROLAP 存储的查询响应速度通常比使用 MOLAP 或 HOLAP 存储模式更慢。 使用 ROLAP 时的处理时间通常也较长。 但是,使用不经常执行查询的大型数据集(例如纯粹的历史记录数据)时,用户可以使用 ROLAP 实时查看数据并可节省存储空间。
注意
使用 ROLAP 时,如果联接与 GROUP BY 子句结合使用,SQL Server Analysis Services可能会返回与未知成员相关的错误信息。 SQL Server Analysis Services可消除关系完整性错误,而不是返回未知成员值。
如果分区使用 ROLAP 存储模式,并且其源数据存储在 SQL Server 数据库引擎中,SQL Server Analysis Services尝试创建索引视图以包含分区的聚合。 如果 SQL Server Analysis Services 无法创建索引视图,则不会创建聚合表。 尽管 SQL Server Analysis Services 处理在 SQL Server 数据库引擎上创建索引视图的会话要求,但 ROLAP 分区及其架构中的表必须满足以下条件,以便SQL Server Analysis Services为聚合创建索引视图:
分区不能包含使用 Min 或 Max 聚合函数的度量值。
ROLAP 分区架构中的每个表必须只能使用一次。 例如,架构不能包含 [dbo].[address] AS "Customer Address" 和 [dbo].[address] AS "SalesRep Address"。
每个表都必须是表而不是视图。
分区架构中的所有表名都必须由所有者名称限定,例如 [dbo].[customer]。
分区架构内的所有表都必须有相同的所有者;例如,所使用的 FROM 子句不能引用表 [tk].[customer]、[john].[store] 和 [dave].[sales_fact_2004]。
分区度量值的源列不能为空。
视图中使用的所有表在创建时都必须将下列选项设置为 ON:
ANSI_NULLS
QUOTED_IDENTIFIER
SQL Server 数据库引擎中索引键的总大小不能超过 900 字节。 SQL Server处理 CREATE INDEX 语句时,数据库引擎将根据固定长度键列断言此条件。 但是,如果索引键中存在可变长度的列,SQL Server数据库引擎还会针对每次更新基表断言此条件。 因为不同的聚合具有不同的视图定义,所以使用索引视图的 ROLAP 处理可能成功,也可能失败,具体取决于聚合设计。
创建索引视图的会话的下列选项必须为 ON:ARITHABORT、CONCAT_NULL_YIELDS_NULL、QUOTED_IDENTIFIER、ANSI_NULLS、ANSI_PADDING 和 ANSI_WARNING。 可以在SQL Server Management Studio中设置此设置。
创建索引视图的会话的以下选项必须为 OFF:NUMERIC_ROUNDABORT。 可以在SQL Server Management Studio中设置此设置。
HOLAP
HOLAP 存储模式结合了 MOLAP 和 ROLAP 二者的特性。 与 MOLAP 一样,HOLAP 会导致分区的聚合存储在SQL Server SQL Server Analysis Services实例的多维结构中。 HOLAP 不会使源数据的副本存储起来。 就只访问分区聚合中的汇总数据的查询而言,HOLAP 与 MOLAP 相同。 访问源数据的查询-例如,如果要向下钻取到没有聚合数据的原子多维数据集单元,则必须从关系数据库中检索数据,并且不会像将源数据存储在 MOLAP 结构中那样快。 在 HOLAP 存储模式下,通常用户执行各查询所用的时间明显不同,具体取决于是根据缓存或聚合解析查询还是根据源数据本身解析查询。
按 HOLAP 存储的分区小于相应按 MOLAP 存储的分区(因为前者不包含源数据),而比 ROLAP 分区响应涉及汇总数据的查询要快。 一般情况下,HOLAP 存储模式适用于多维数据集中要求快速响应基于大量源数据的汇总的查询的分区。 但是,当用户生成必须涉及叶级数据的查询时(例如,计算中值),通常最好选择 MOLAP。
另请参阅
主动缓存(分区)
同步 Analysis Services 数据库
分区(Analysis Services - 多维数据)