SSAS/MDX 查询优化问题总结与解决方案大全

0
已邀请:
3

梁勇 - 天道酬勤、上善若水。爱好商业智能 2013-07-16 回答

从存储优化和计算优化入手:

1、结构设计性能优化

分区: 通过分区可以把数据进行分割成若干个逻辑区,当进行查询时就不需要在所有的数据中进行计算,而是只在一个数据区间内执行计算。即查询的时候只在此分区查询才有效果。

聚合:通过聚合可以确保数据以相同的方式聚合并把聚合值存储在多维数据集的分区内,通过聚合可以使存储引擎能很快的响应计算引擎的数据请求,因为设计了聚合只在第一次部署时对多维数据集进行聚合,一旦处理后,聚合值就会存储在分区内,之后的请求只需要到聚合索引中查找就可以,不需要二次计算,可以极大提高查询效率。

属性关系:日期维度创建对应的属性关系,查询的时候在层级加载的时候,可以有效的找到对应的子级。



2、MDX语句的优化

计算优化是一个比较繁琐的过程,但是一个好的计算体验应该是,尽量少的运用命名集合,使用命名集会失去SSAS 对计算的优化支持。把需要频繁计算的语句写成Member,这样可以使用缓存。

控制缓存的范围也很重要,要确保你的缓存范围不要对其他计算成员有冲突,防止对其他数据进行覆盖。

块计算可以显著的提高计算性能,块计算可以实现MDX语句以块为单位进行计算,而不是一个单元一个单元的计算,但是,这也只适用于一些情况,当然,我们也应该尽可能的发挥这个优势来提升性能。
2

梁勇 - 天道酬勤、上善若水。爱好商业智能 2013-07-16 回答

也可以按照以下按4个方面进行优化。
1、维度设计
2、Cube设计
3、分区设计
4、聚合设计


维度设计
良好的维度设计是建制Cube最重要的方面。根据最终用户的业务需求,设计维度正确的属性、属性关系及层次结构。

1.1 避免只有单个维度的多维数据集
1.2 避免建立多个维度,而这些维度只有单个属性,请考虑统一这些维度
1.3 键属性(KeyColumns)的键列保证成员唯一性(可以使用多个键列保证唯一性)
1.4 维度表中的字段如果没有分析意义,或暂时不用作分析,不要将它建为属性
1.5 避免为每个维度指定多个不可聚合的属性(即IsAggregatable不要设为False)
1.6 属性如设为不可聚合(IsAggregatable设为False),要指明DefaultMembers的值
1.7 有些说明性字段(比如客户的电话、邮箱地址),如果将它建为属性,请将AttributeHierachyEnabled 设为 False
1.8 每个维度最好建立一个层次结构
1)在维度中建立层次结构。如维度向导没有发现这些层次结构,要自行添加。
2)建立层次结构前,先检查属性和属性之间是否存在严格的一对多关系,如有,请建立属性关系;
3)属性关系的名称应与相关属性的名称相匹配;
4)避免冗余属性关系,因为当多维数据集的粒度属性是非键属性时,这些关系可能导致数据无法聚合;
5)建立好属性关系,再建立层次结构;
6) 避免将属性的可见属性层次结构用作用户定义的层次结构中的级别
7)如无必要,避免建立不存在属性关系的非自然的用户层次结构;
1.9 将维度的 UnknownMember 属性从Hidden 更改为None
1.10 定义时间维度时,使用“商业智能向导”,设置“Time”属性类型,以使它们与维度类型兼容
1.11 设定时间维度键属性的valueColumn设为日期格式的字段
1.12 不要将维度的 ErrorConfigurations中的KeyDuplicate 设为IgnoreError ,这样,SSAS会自检查维度和属性的数据关联性是否正确,并提出警告。根据这些警告,检查维度和属性的关联性是否正确。
0

梁勇 - 天道酬勤、上善若水。爱好商业智能 2013-07-16 回答

Cube设计

    []避免创建具有相同维数和粒度的度量值组[/][]避免将两个完全没有维度关联系的事实表放在一个Cube中[/][]避免在一个多维数据集中包含15个或更多的度量值组[/][]将非重复计数度量值分为不同的度量值组[/][]将Cube与分析无关的属性的 AttributeHierarchyEnabled设为False[/]


分区设计

1、 使用 MOLAP存储模式
2、 将超过2千万行或大小超过250MB的大分区拆分为较小的分区以改进性能
3、 将度量值组的分区与少于2百万行或大小小于50MB分区合并
4、 DistinctCount度量值组分区可考虑按最常用的维度来分区(不一定是时间)

聚合设计

1、 不要在低于事实表粒度属性的级别建立聚合
2、 为具有 500,000 或更多行的分区设计聚合
3、 为单个分区生成的聚合数不能超过500
4、 不要将相关属性包括在同一聚合中
5、 将一个度量值组中的聚合设计数限制为三个
6、 删除任何分区都不使用的聚合设计
7、 包括只具有半累加性度量值的所有度量值组聚合中的时间维度粒度属性
8、 设计聚合时,要精确指定“估计的计数”和“分区的计数”;或者由SSAS自行计数
9、 移除没有应用到分区的聚合
10、基于用户使用情况进行优化(经常使用的维度、属性),针对这些属性设置聚合,以取得最佳查询性能。
0

刘兴建 - MSBI 工程师-天善学员 2013-07-17 回答

很好,学习了……
0

superboyli520 - 微软BI技术达人 2013-07-23 回答

不错,学习了!
0

zzmm113 2014-11-12 回答

对我有用,谢谢分享
0

superboyli520 - 微软BI技术达人 2014-11-21 回答

跪求楼主,以上理论依据是什么?
0

cicelysavira 2014-11-21 回答

很好,正在学这个方面的。。谢谢

要回复问题请先登录注册