SSAS - 最佳實踐和性能優化(1)

問題

一般Analysis Services cube的性能問題可能由多方面的原因造成。源系統,cube設計,MDX查詢,網絡問題等因素都可能導致性能問題的產生。在這個系列文章中,我會分享一些設計和開發cube的最佳實踐和可以用來解決現存一些性能問題的小技巧。

解決方案

在開始深入性能調優細節之前,讓我們一起來看看典型微軟BI應用架構,這會幫助我們甄別和定位性能問題和瓶頸。

下面的架構圖展示了經典的微軟BI應用架構,從左到右我們可以看到不同的層次。
第一層是源系統或者數據倉庫。第二層是Analysis Services cube,它從源系統拉取數據,然後將數據存儲到cube/OLAP庫中。第三層是從cube/OLAP消費數據的報表應用。

儘管典型的微軟BI應用架構將不同的層次放在不同的物理機器上,但是並不是所有的情況都是如此。比如,三層應用都放在一臺物理機器,或者前兩層放在一臺機器,第三層單獨一臺機器等等實際場景。

這裏寫圖片描述

SSAS性能優化三個關注點:

1.查詢性能
2.處理性能(Process)
3.合理和充分的利用硬件資源

SSAS內部架構的組件簡介:

這裏寫圖片描述

查詢解釋器(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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章