SSAS - 最佳实践和性能优化(1)

问题

一般Analysis Services cube的性能问题可能由多方面的原因造成。源系统,cube设计,MDX查询,网络问题等因素都可能导致性能问题的产生。在这个系列文章中,我会分享一些设计和开发cube的最佳实践和可以用来解决现存一些性能问题的小技巧。

解决方案

在开始深入性能调优细节之前,让我们一起来看看典型微软BI应用架构,这会帮助我们甄别和定位性能问题和瓶颈。

下面的架构图展示了经典的微软BI应用架构,从左到右我们可以看到不同的层次。
第一层是源系统或者数据仓库。第二层是Analysis Services cube,它从源系统拉取数据,然后将数据存储到cube/OLAP库中。第三层是从cube/OLAP消费数据的报表应用。

尽管典型的微软BI应用架构将不同的层次放在不同的物理机器上,但是并不是所有的情况都是如此。比如,三层应用都放在一台物理机器,或者前两层放在一台机器,第三层单独一台机器等等实际场景。

SSAS - 最佳实践和性能优化(1)

SSAS性能优化三个关注点:

1.查询性能
2.处理性能(Process)
3.合理和充分的利用硬件资源

SSAS内部架构的组件简介:

SSAS - 最佳实践和性能优化(1)

查询解释器(Query Parser)

查询解释器的XMLA监听器接收请求,解析请求,然后将解析过的请求传输给查询处理器执行请求。

查询处理器(Query Processor)

从查询解释器接收经过验证和解析的请求后,查询处理器生成一个执行计划,该执行计划指示如何从多维数据集(cube)和所使用的计算中返回请求结果。然后,查询处理器会将计算结果缓存到公式引擎缓存(查询处理器缓存),使具有同意权限的用户之间能重用计算结果。

查询处理器操作总结:

1.从存储引擎请求子cube数据查询
 a.将请求转换为子cube数据请求

2.通过以下方式产生结果姐
 a.子cube的批量计算

3.将计算结果存储在公式引擎的不同域中
 a.查询域 - 缓存不会再会话的查询*享
 b.会话域 - 缓存将在会话的查询*享
 c.全局域 - 缓存可在具有相同安全角色的会话之间跨会话共享

存储引擎(Storage Engine)

存储引擎响应查询处理器产生的子cube数据请求(用于查询、缓存和数据检索的数据的子集或逻辑单元)。它首先检查所请求的子数据是否已经在存储引擎缓存中可用,如果缓存有查询的数据,直接返回数据集。如果没有,那么它将检查聚合存储是否有所需查询的聚合数据,如果是,那么它将从聚合存储中获取聚合数据并将其缓存到存储引擎缓存,并将其发送到查询处理器来响应请求。如果不能直接获取聚合数据,它就会捕获细节数据,计算所需的聚合,将其缓存到存储引擎,然后发送到查询处理器来响应请求。

存储引擎操作总结:

1.创建属性存储(键存储、关系存储、位图索引等)
2.创建层次结构存储
3.创建聚合存储
3.存储引擎缓存
 a.当查询执行时,从存储引擎缓存中加载数据
 b.Cleaner线程清除存储引擎缓存中的数据(在内存压力下),或者处理分区
4.聚合数据
 a.使用存储的聚合值来响应请求
 b.根据需要,聚合低粒度的数据,产生新的聚合值
5.事实数据
 a.并行地扫描MOLAP分区和分区段
 b.使用位图索引扫描页面以查找请求的数据

在排除故障时,您需要了解哪个组件消耗了大量时间,需要优化。比如查询处理引擎或者存储引擎。我们可以通过使用SQL Server Profiler捕获某些事件,知晓各组件在没有缓存的情况下消耗的时间,判断哪些组件需要优化。(空缓存,了解更多关于缓存警告的信息,请参阅本系列的下一章节):

存储引擎时间 = 每个子cube查询事件的时间总和
公式引擎 = 总执行时间(Query End Event) - 存储引擎时间(A)

如果存储引擎的查询子cube事件消耗了大量时间,那么这个性能问题极有可能发生在存储引擎上。在这种情况下,可能需要优化维度和聚合的设计,并创建分区以提高查询性能(在本系列的下一篇文章中详细讨论了这个问题)。如果存储引擎没有花费太多时间,那么查询处理器就是性能的问题所在,在这种情况下,您需要专注于优化MDX查询。

性能优化的三个方面:

处理性能

在处理数据过程(Process)中,SSAS将从源系统和数据仓库中获取最新数据,刷新Cube/ OLAP库,生成集合数据。同时也会为维度的属性和自然层次分别创建属性存储(Store)和层次存储。虽然处理时间并不会像查询时间一样,直接影响用户体验。但是,保证用户报表在定义的服务水平协议(SLA)范围内展现最新数据是很重要的。

查询性能

优化查询性能的方法:关注维度和度量组的设计,创建聚合和位图索引(通过设置适当的属性),优化MDX查询(例如,通过单元模式和使用子空间模式来避免单元格)

SSAS实例/硬件资源优化

处理数据(Process)和查询性能取决于如何优化资源以获得更好的吞吐量。您可以通过指定并行处理的线程数,设置可供SSAS使用的内存、改进或使用更好的I/O(输入/输出)系统或者将数据和临时文件放置在更快的磁盘上来获取更好的性能。

原文地址:
https://www.mssqltips.com/sqlservertip/2565/ssas–best-practices-and-performance-optimization–part-1-of-4/