技术开发 频道

SQL Server 2008数据仓库可扩展性

分析服务的改进

SQL Server 2008 Analysis Services (SSAS) 采用新的块计算、回写和可扩展的共享数据库执行功能显著提高了查询速度。管理方面还提升了备份更大规模数据库的能力。

MDX查询性能:块计算

在SQL Server 2008 SSAS中改进的块计算可以加快MDX 查询处理,其方法是通过只处理多维数据集空间的非null值,因为它并没有在null 单元浪费时间。子空间计算的主要思想是与一个计算的逐个单元评估进行比较。假设一个RollingSum 用于计算去年和今年的销售总和,而一个查询是查找RollingSum 2005年所有产品的总和。

RollingSum = (Year.PrevMember, Sales) + Sales
      
SELECT 2005 on columns, Product.Members on rows WHERE RollingSum


[2005, all products] 的10个单元轮流评估。对于每一个单元,我们回到上一年,取得销售值,并将它添加到今年的销售里。该方法有两个明显的性能问题。

首先,如果数据是稀疏的,那么即使是会返回一个null值的单元也会被计算。在这个例子里,计算除了Product3和Product6以外的任何一个单元都是种浪费。这个影响可能极大——在一个稀疏立方体种,被评估的单元数目可能会相差好几个数量级。

其次,即使数据总的来说是密集的——意味着每一个单元都有一个值并且没有浪费时间访问空单元,也还是有重复的工作。每一个产品都重复做了相同的工作(例如获得上一年成员、为上一年单元建立新的上下文、检查递归)。将这个工作从评估每一个单元的内部循环中删除将会使得更为高效。

现在假设使用一个子空间计算方法来执行相同的例子。首先,我们以自己的方式建立一个执行树,确定应该填写哪块空间。假设我们需要为下面的查询计算空间:

[Product.*, 2005, RollingSum]
假设有这个计算,这意味着我们必须先计算空间:

[Product.*, 2004, Sales]
接着这个空间:

[Product.*, 2005, Sales]
然后对这两个空间应用‘+’操作符。

销售是一个基本测量,所以我们简单获得存储引擎数据将这两个空间填写在叶子节点,然后生成这个树,应用这个操作符填写根节点的空间。因此获得了这个记录(Product3,2004,3)以及这两个记录{ (Product3,2005,20),(Product6,2005,5)},并对它们应用了+操作符来生成结果。 

+操作符操作于空间,不是简单的数量值。它结合两个空间以生成一个包含每个空间中产品的空间,它的值是它们的总和。   
我们只对可用于结果的数据进行操作,不打算对整个空间执行计算。

0
相关文章