SQL Server 关系型数据库管理系统针对数据仓库的改进
SQL Server 2008 的关系型数据库管理系统同之前的版本相比有了巨大改进,因此在创建、管理以及查询大型数据仓库时的性能会更好。下面这部分内容将详细说明表1中所列出的关系型数据库管理系统在数据仓库方面的改进。
星型关联
如果采用维度化对数据仓库进行模型化,那么你的主要工作将集中在星型关联查询中。这些查询都遵循一个通用的模型,即事实数据表(fact table)同一个或多个维度表(dimension table)进行联接。另外星型查询通常依靠维度表的非键列来实现筛选条件并在事实数据表的某一列(称之为measure列)中执行聚合(例如SUM)。对于行的碎片处理,很多种星型查询的性能在SQL Server 2008中都得到了显著提升。
新技术依靠bitmap filter功能,即Bloom filters (参考Wikipedia 2007 ,Bloom filter, http://en.wikipedia.org/wiki/Bloom_filter),它可以让SQL Server 在查询赋值过程中,针对后续处理及早的排除不符合条件的行。同其它产品所使用的查询处理技术相比,这样可以大量节约CPU 使用时间。据我们观察,在使用新的星型查询时,整个关系型数据仓库的性能会提高15-25%。一些个别查询速度甚至能够比以前快7倍以上。
新的星型联接使用一系列的哈希联接,为所涉及的每一个维度表构建一个哈希表。构建哈希表会产生一些额外信息,名叫bitmap filter, Bitmap filter 即图1中标记为“Join Reduction Info.”的方框,对于那些在联接过程中将被排除的行,这些筛选器会在扫描事实数据表时先将它们几乎全部排除掉。如此一来CPU 就不需要花时间来复制将会被排除掉的行,也不需要在哈希表中去检测它们,从而节约了时间。上图中显示了在对事实数据表扫描时的筛选效果。SQL Server 2008的查询执行器同样会在执行过程中对bitmap 进行重新排序,将最有可能被选中的放在首位,从而进一步节省了CPU 的时间,这是因为一旦bitmap对事实数据表的行检查失败,那么该行将被跳过。
新的星型查询优化技术只在Microsoft SQL Server 2008 企业版中提供。当可以降低查询消耗时,SQL Server 会自动按照星型联接模型对查询进行优化,你不需要对应用程序做任何修改就可以体验到性能的显著提升。
分区表并行
你希望从你的硬件设备中获得最大的性能吗?SQL Server 2008中的分区表并行(partitioned table parallelism, PTP)功能可以帮助你实现这个愿望。数据仓库应用程序经常需要从事实数据表中收集大量的历史数据,这些数据通常是按照日期来进行分区的。在SQL Server 2005中,对不同分区中的查询使用不同的线程,这样有时会影响包含分区表的查询的性能,尤其是在配置了多核处理器的并行共享存储多处理机(shared memory multiprocessor, SMP)计算机中。分区表并行可以更好的利用现有硬件设备的处理能力,无论一个查询涉及到多少个分区,都可以提升针对分区表的并行查询性能。 该功能默认执行,不需要手动调整或配置。下图显示了在一个典型数据仓库场景中分区表并行的影响。
假设一个事实数据表中的销售数据按照销售日期位于四个分区中,每个分区都包含七天的数据,如图表的上部分所显示。查询Q 是过去七天的销售总和。这个查询根据其执行的时间不同,可能会作用于不同的分区。如查询Q1所示,它涉及一个单独的分区P2,而Q2则涉及两个分区,因为相关的数据在执行时跨过了P3和P4。
在SQL Server 2005中执行Q1和Q2可能会产生一些意外的状态,这是因为针对单独分区的查询,系统可以分配所有的线程,因此Q1查询将由所有可用线程围绕P2进行并行处理(执行没有在图中显示)。但是在Q2情况下,即使底层硬件还有额外的可用线程,执行器也只为分区P3和P4各自分配一个单独的线程。因此在8路计算机上,Q2只利用了CPU可用资源的2/8(25%),而且很可能比Q1执行得要慢很多。
在SQL Server 2008中执行Q1和Q2会更好地利用可用硬件,因此具有更好的性能和可预测性更强的动作。在Q1情况下,执行器依然可以将所有可用的线程用于处理P2中的数据(没有显示)。而在Q2情况下,则会生成一个并行计划,执行器按计划轮流指派所有可用线程到P3和P4,它产生的效果如图中New Allocation所示。这时CPU仍然被完全利用,而Q1和Q2的性能则相差无几。在这种全新的线程轮流指派方式下,处理器的核心越多,分区表并行所能提升的性能就越明显。当一个查询所访问的数据全部都在主内存缓冲池中——对于最近使用的分区来说这是种典型情况,我们在对涉及两个分区的查询所进行的内部测试中,速度提升幅度超过了16倍。注意,实际结果将取决于查询、数据组织和硬件配置。
有关线程分配策略以及分区表机制的管理特性,请参考SQL Server 2008联机丛书。
对齐分区索引视图
对齐分区索引视图使你能够更有效地创建并管理关系型数据仓库中的聚合,并在一些之前不能有效使用它们的场合中使用它们,从而提升了查询性能。通常情况下,你有一个按日期分区的事实数据表,在此之上定义索引视图(聚合),以加快查询。当你转到一个新的表分区时,定义在分区表上的对齐分区索引视图所匹配分区也会自动转过去。
这与SQL Server 2005相比是个显著的提高,在SQL Server 2005中你必须在使用ALTER TABLE SWITCH转入或转出一个分区之前,删除所有定义在分区表上的索引视图。SQL Server 2008中的对齐分区索引视图功能对于大型分区表上的索引视图非常实用,同时还可以节省整个分区表上重建聚合的开销,自动维护聚合,以及实现索引视图匹配(重写自动查询以利用聚合解决只涉及基础表而不涉及聚合的查询)。关于索引视图的详细信息,请参考Microsoft TechNet 中的文章: Improving Performance with SQL Server 2005 Indexed Views.
SQL Server 2008数据仓库可扩展性
0
相关文章