Cheney Shue

导航

 
使用分区提升查询性能

分区是将度量值组数据分散存储到多个物理单元的机制,有效的使用分区可以提高查询和处理性能。这一章讲述如何通过分区提升查询性能。分区对处理和管理数据的好处将在“使用分区提升处理性能”章节详述。

在查询时如何使用分区

当你查询Cube时,存储引擎尝试从存储引擎缓存中查找数据。如果缓存中没有所需的数据,就试图从聚合中查找数据。如果聚合中也没有数据,就必须在分区中扫描事实数据。如果单分区也能够实现存储引擎并行查询,并使用位图索引确定查询哪部分数据,那就没必要再去优化性能了。

所以你可以通过多分区将度量值组分成多个物理单元。存储引擎就同时独立查询每个分区,并且只需要查询跟需求相关的分区。



17  多分区智能查询


17显示了从称为Adventure WorksCube中按Business Type查询Reseller Sales Amount的事件。Reseller Sales度量值组按照年分成四个分区。因为查询按2003年切片,所以存储引擎可以直接在2003年的分区中查找数据,而不需要扫描其他的分区。SQL Server Profiler跟踪到这个查询说明查询只需要从2003年分区读取数据。

设计分区

如果你清楚用户的查询习惯,你可以按照用户常用的查询模式设计分区。但如果用户没有统一的查询模式,多少就有些困难了。常用的做法是按照时间元素分区,例如日、月、季度、年等。许多查询都涉及到时间,所以按时间分区通常都能提升性能。

当你设计了分区,你必须将源数据表、视图、或源查询绑定到分区。对MOLAP分区,Cube处理过程中,Analysis Services使用分区中每个属性的最小和最大DataID标识数据片段,以便计算分区中属性的数据分布范围。分区中每个属性的数据范围信息包含在数据片断定义中,数据片断就如同是子立方体。有了这些信息,存储引擎可以在查询时只挑选相关的分区扫描。对ROLAP和主动缓存分区,你必须自己在分区参数中定义片断。

在设计分区时,使用以下的方法创建和维护分区:

·         当你决定将数据分散到多个分区时,你通常会估量分区的容量和分区的数量。分区容量是分区中数据量和分区聚合文件的大小。尽管分区中的段可以并行查询,但如果聚合文件无法装载到内存,查询效率就非常糟糕。

·         通常,每个分区的记录不应超过两千万条。而且,分区大小不应超过250MB。如果分区超过这个两个限制中的任何一个,就应考虑将分区分成更小的单元以减少分区扫描时间。多分区通常都是不错的,可过多的分区也会影响性能。

·         如果你有多个分区,但每个分区小于50MB或少于两百万数据量,可以考虑将它们整合到一个分区。而且,创建少于4,096行记录的分区不是一个好方法,因为存储引擎不会为如此少的数据创建聚合和索引。注意这个数量上限由msmdsrv.ini文件中的IndexBuildThreshold参数控制。实际的生产环境中应该不会少于4,096行记录。

·         当你定义分区时,不需要保证每个分区都包含一致性的数据集。例如,一个度量值组可以有3个按年的分区,11个按月的分区,三个按周的分区,和1~7天的分区。使用不同级别的数据创建异构分区可以让你更简便的管理新数据装载,因为可以在不影响其他已存分区的情况下处理分区,用户的查询也不会受到干扰。而且,还可以为一组分区设计聚合,共享同级别的数据(详细内容在下一节)。

·         无论何时你需要为度量值组建立分区,你必须取保为每个分区更新统计信息。更确切地说,确保分区记录计数和属性成员计数能准确性是非常重要的。关于如何更新分区计数,参考前面的“提供Cube数据的统计信息”章节。

·         对包含Distinct Count汇总函数的度量值组,考虑专门为此度量值组优化。详细信息,参考“优化Distinct Count计算”章节。

多分区的聚合考虑

你可以独立对每个分区使用不同的聚合设计方案。得益于这一特性,你可以为那些需要高度聚合的数据集建立独立的分区。尽管这种的设计可以增强性能,但太多的分区也会产生负担。

为了帮助你进行聚合设计,在此提供了一些建议。当你的分区少于10个,每个度量值组最好不多于2种聚合设计;当分区少于50个,每个度量值组聚合设计要少于3种;多于50个分区,每个度量值组聚合设计不多于4种。

因为每个分区都可以有独立的聚合设计方案,最好根据分区的统计信息,将类似的分区归为一组。这样就可以为一组分区应用一种聚合设计。

考虑这样的例子:一个Cube按月建立了多个分区,新的数据将会装载到当前这个月的分区中,并且这个分区是目前查询最频繁的分区。在这种情况下,通行的聚合策略是对最近的分区执行基于使用优化,而老的、不常使用的分区可以不用过多关注。

最新的聚合设计可以复制到一个基本分区。这个基本分区不包含数据,它仅仅是保存当前的聚合设计。当要增加新分区时(比如新的一个月开始了,建立了一个新的分区),可以把基本分区克隆到新分区,这样新分区可以继续使用之前基于使用优化的聚合设计。在执行了第一次执行了FULL处理后,就可以周期性的增量更新分区。关于处理技术,参考“有效地更新分区”章节。



下一章:编写高效率的MDX语句
posted on 2007-12-16 20:57  Cheney Shue  阅读(3104)  评论(2编辑  收藏  举报