繁体   English   中英

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

[英]Why does my cube compute so slowly at the lowest drill down level?

我仍在学习OLAP,多维数据集和SSAS的知识,但是我遇到了性能障碍,并且不确定自己是否了解发生了什么。

因此,我有一个简单的多维数据集,它定义了两个简单的维度(类型和区域),第三个时间维度层次结构(转到Year-> Quarter-> Month-> Day-> Hour-> 10-Minute)和一个度量(总和)在名为Count的字段上)。 数据库跟踪事件:事件发生的时间,类型,发生的位置。 事实表是每10分钟间隔预先计算的事件摘要。

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

在大多数情况下,它足够灵活。 但是,随着我深入钻取树,查看每个级别所需的时间更长。 最后,在分钟级别上,仅显示6条记录似乎要花费20分钟左右。 但是后来我意识到,无需等待就可以查看其他分钟级别的向下钻取,因此多维数据集似乎正在计算整个表,这就是为什么要花这么长时间的原因。

我不明白 我希望去季度或年将花费最长的时间,因为它必须汇总所有数据。 转到最低指标,将其过滤到大约180个单元(6个间隔,10个类型,3个区域),似乎应该是最快的。 为什么多维数据集处理整个数据集而不是仅处理可见子集? 为什么最高级别的聚合如此之快,而最低级别的聚合如此之慢?

最重要的是,通过配置或设计我可以做些什么来改善它?

我刚才想到的一些其他细节可能很重要:这是SSAS 2005,它在SQL Server 2005上运行,并且使用Visual Studio 2005进行BI设计。 多维数据集(默认情况下)设置为完整MOLAP,但未分区。 事实表有1,838,304行,因此这不是一个疯狂的企业数据库,但也不是简单的测试数据库。 没有分区,所有SQL内容都在一台服务器上运行,我可以从工作站远程访问该服务器。

当您查看分钟级别时-您是否在谈论从12:00到12:10的所有事件,与白天无关?

我想如果您需要更快的速度(因为显然它将扫描所有内容),则需要使“时间”维度的两个部分正交-设置日期维度和时间维度。

如果您的时间是从1/1/1900 12:00到1/1/1900 12:10,我不确定那会是什么...

您是否验证了多维数据集的聚合以确保它们是正确的? 一种简单的判断方法是,无论您进入哪个钻取树,如果获得相同数量的记录。

假设情况并非如此,那么Cade建议的关于创建Date维和Time维的建议将是最明显的方法,但这在SSAS中是一个更大的禁忌。 有关更多信息,请参见本文: http : //www.sqlservercentral.com/articles/T-SQL/70167/

希望这可以帮助。

我还将检查以确保您正在运行SQL Server 2005的最新sp。

RTM版本存在一些SSAS性能问题。

还请检查以确保您已正确定义时间维度和其他暗淡的属性关系。

如果未定义这些关系,则SSAS存储引擎将扫描所需的更多数据

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

如上所述,将日期和时间分开会大大减少日期维度的基数,从而可以提高性能并提供更好的分析体验。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM