SQL Server Enterprise Edition 中的分析服务显式支持分区多维数据集,这种分区多维数据集与关系型数据库中的分区表相当。对于中等或大型的多维数据集,分区可以大大改善查询性能、加载性能,并使多维数据集维护更容易。分区可以按一个或多个矢量来设计,但多维数据集通常仅按日期矢量分区。分区多维数据集的渐变加载(包括创建新分区)应该由自定义应用程序执行。
注意:分区可以在本地存储或分布在多个物理服务器上。尽管跨多个服务器的分布式分区对非常大的系统可能有好处,但我们的测试表明,多维数据集尺寸达数万亿字节时,分布式分区解决方案才能提供最大的好处。本文仅考虑本地分区多维数据集。分区多维数据集的渐变加载(包括创建新分区)应该由自定义应用程序执行。
分区的优点对多维数据集进行分区将极大地改善查询性能。甚至中等大小的多维数据集(基于 100 GB 来自关系型数据库的数据)也会从分区中受益。多维数据集分区的优势在多用户加载的情况下更显著。
每个应用程序查询性能的改善随多维数据集结构、使用方式和分区设计的不同而变化。如果仅需要按月分区多维数据集中一个月的数据,那么查询就只访问一个分区。一般情况下,放弃单个分区中的大多维数据集,转而采用精心设计的本地分区策略,我们预计查询性能可以平均改善 100% 至 1000%。
修剪旧数据对于关系型数据仓库,分析服务系统管理员可能选择仅在多维数据集中保留最新的数据。如果是单个分区,清除旧数据的唯一方法就是重新处理多维数据集。通过按日期矢量分区,管理员可以不关闭系统就丢弃旧分区。
维护从管理的观点来看,分区是在不影响其他分区的情况下可以被独立添加和丢弃的数据单位。这有助于在系统中管理数据的生命周期。每个多维数据集分区单独存储在一组文件中。由于分区文件相对较小,备份和还原这些数据文件的操作更容易管理。这对大小在 2 GB 以下的分区文件尤为明显。这种情况下,存档和还原实用程序也会有效。如果多维数据集的一部分损坏,或发现这部分包含不正确或不一致的数据,那么可以仅重新处理该分区,这比处理整个多维数据集更为迅速。另外,为节省空间,也可能更改以及合并旧分区的存储模式和设计。
不同的分区可以使用不同的数据源。单个多维数据集可以组合多个关系型数据库的数据。例如,建立企业数据仓库时,可以使来自欧洲和北美的数据驻留在不同的服务器上。如果多维数据集按地理分区,在逻辑上多维数据集可以合并这些完全隔离的数据源。单个多维数据集定义的多个源服务器上的关系架构必须几乎完全相同,这样才能正常工作。
加载性能可以并行加载多个分区,因此分区多维数据集的加载速度可以比未分区多维数据集更快。后面我们将讨论,要并行处理分区,您必须获取第三方工具或创建一个简单的自定义工具。在多处理器计算机上,性能改善很明显。并行处理工具应该可以将 CPU 利用率提高到 90%。通常情况下,每两个处理器同时处理一到两个分区可获得这样高的性能。例如,在一个所有的处理器都用来处理多维数据集的四处理器的计算机上,您可能希望同时处理两到四个分区。如果试图处理的分区的个数多于您拥有的处理器的个数,性能将显著降低。每两个处理器处理一个分区是比较保守的;理想的数字取决于来自源数据库的数据流的速度、聚合设计、存储和其他一些因素。
在某些情况下,重新创建分区比渐变处理分区效率更高。当然,如果整个多维数据集保留在单个分区中,这种情况发生的可能性很小。
分区的缺点分区的主要缺点是需要管理员创建应用程序来管理分区。在尚未设计、测试和试运行应用程序来管理分区之前,将分区多维数据集投入正式运行是不恰当的。本文的目的之一就是讨论与分区管理应用程序有关的问题和设计决策。
元数据操作随着分区数量的递增,元数据操作(如浏览多维数据集定义)的性能将下降。对于管理员(而不是最终用户)而言,管理分区多维数据集是一个负担,而管理一个过度分区的多维数据集将是一个难题。
设计时要考虑的因素一个有效的查询计划要权衡多个因素:
如果采用静态的,或者象日期这样变化易于预测的矢量,分区就较容易管理。例如,按“美国各州”进行的分区是相对静态,应用程序设计者可预期并不会收到来自第五十一州的大量警告。相反,由于可能会较频繁地添加新产品,因此按产品矢量划分的分区可能会随时间而更改。设计者仍然可以用动态矢量来分区,但应该认识到管理系统会更加复杂。如果一个矢量被标记为“变化中”,那么就不允许以该矢量进行分区。无论如何,创建“其他”分区来容纳未知矢量成员的数据是明智的。