代码之家  ›  专栏  ›  技术社区  ›  CodexArcanum

为什么我的多维数据集在最低的向下钻取级别计算得那么慢?

  •  1
  • CodexArcanum  · 技术社区  · 14 年前

    我仍然在学习OLAP、多维数据集和SSAS的诀窍,但是我遇到了性能障碍,我不确定我是否理解发生了什么。

    所以我有一个简单的多维数据集,它定义了两个简单的维度(类型和区域)、第三次维度层次结构(年份-季度-月份-天-小时-10分钟)和一个度量值(对称为count的字段求和)。数据库跟踪事件:事件发生的时间、类型和发生的位置。事实表是每10分钟一次事件的预先计算汇总。

    因此,我设置了我的多维数据集,并使用浏览器一次查看我的所有属性:随着时间的推移,每种类型的总计数,从一年向下钻取到10分钟的间隔。报告的性能与浏览类似。

    在大多数情况下,它足够快。但是,当我深入到钻孔树中时,查看每一层需要更长的时间。最后,在分钟级别上,它似乎需要20分钟左右才能显示6条记录。但后来我意识到,我可以不等待地查看其他分钟级别的明细表,所以立方体似乎正在计算此时的整个表,这就是为什么它需要这么长时间。

    我不明白。我预计每季度或几年会花费最长的时间,因为它必须将所有数据汇总起来。到最低的度量标准,过滤掉大约180个单元格(6个间隔,10个类型,3个区域),看起来应该是最快的。为什么多维数据集处理整个数据集而不仅仅是可见的子集?为什么最高级别的聚合如此之快,最低级别的聚合如此之慢?

    最重要的是,我可以通过配置或设计来改进它吗?

    我刚刚想到的一些其他细节可能很重要:这是SSAS2005,运行在SQLServer2005上,使用VisualStudio2005进行BI设计。多维数据集(默认情况下)设置为完整的MOLAP,但不分区。事实表有1838304行,所以这不是一个疯狂的企业数据库,但也不是简单的测试数据库。没有分区,所有SQL东西都运行在一台服务器上,我可以从工作站远程访问该服务器。

    3 回复  |  直到 14 年前
        1
  •  0
  •   Cade Roux    14 年前

    当你看分钟级别的时候——你是在谈论从12:00到12:10的所有事件吗?

    我想如果你需要更快的速度(因为很明显它会扫描所有的东西),你需要使你的“时间”维度的两个部分正交-形成一个日期维度和一个时间维度。

    如果你是1900年1月1日12:00到1900年1月1日12:10,我不知道那会是什么…

        2
  •  0
  •   ajdams    14 年前

    您是否验证了多维数据集的聚合以确保它们是正确的?任何一个简单的方法都是,如果你得到相同数量的记录,不管你下的是什么样的钻树。

    假设不是这样的话,那么Cade关于创建日期维度和时间维度的建议将是最明显的方法,但它是SSAS中更大的一个“不”。有关详细信息,请参阅本文: http://www.sqlservercentral.com/articles/T-SQL/70167/

    希望这有帮助。

        3
  •  0
  •   Jason Horner    14 年前

    我还将检查以确保您运行的是最新的SQL Server 2005 SP。

    RTM版本有一些SSAS性能问题。

    还要检查以确保在时间维度和其他DIM上正确定义了属性关系。

    如果没有定义这些关系,SSAS存储引擎将扫描更多必要的数据

    更多信息: http://ms-olap.blogspot.com/2008/10/attribute-relationship-example.html

    如上所述,拆分日期和时间将显著降低日期维度的基数,这将提高性能并允许更好的分析体验。