Sql-Server

減小事實和維度後 SSAS 多維數據集處理時間增加

  • December 28, 2015

我有一個 55 GB 大小的立方體,大約需要 2 小時才能處理完。因為我有過去 4 年的數據,但我們的業務只需要 2 年的數據。為此,我將維度和事實視圖更改為只有最近兩年的數據。現在,我的立方體大小減少到 32 GB,但處理時間增加了 30 分鐘(即 2 小時 30 分鐘)。我期望它會更少,因為我限制了大量數據進入多維數據集。為什麼處理時間實際上應該減少卻增加了?我現在如何減少處理時間?

PS:我已經嘗試過多維數據集分區,並且由於大尺寸,它也增加了處理時間。

我正在使用通過 WHERE 子句限制數據的視圖。

我的看法基本上是這樣的:

SELECT V.Col1, V.Col2.... V.Col13 
FROM DimeTable V 
WHERE <my filter clause>

它從維度表中選擇幾乎所有列,因此我無法在所有這些列上創建非聚集索引,因為它可能會減慢插入操作並且對我沒有多大幫助

處理一個立方體主要包括 3 個步驟,

  1. 獲取數據
  2. 建立索引
  3. 計算聚合

在我看來,第 2 步和第 3 步是最便宜的(在處理期間),所以讓我們從它開始。

建構索引只不過是為屬性關係計算點陣圖索引而已。因此,這取決於您設計了多少人,這可能需要更長的時間或不需要,但通常不應該花費半個小時。這只不過是說“嘿,如果這個項目組被過濾了,我已經知道裡面有什麼項目,所以我可以把它們加起來而不是做一個NONEMTPTYCROSSJOIN

計算聚合是為您定義它們的每個級別計算小計的過程。如果您自己沒有使用任何usage based optimizationattribute hierarchies也沒有定義任何聚合,則這些聚合僅在維度層次結構的葉級別(也就是每個屬性的最低級別)上計算。這基本上是“嘿,如果我需要這個項目組的銷售額,我已經預先計算了它並且不必添加這些項目”

獲取數據時會佔用大部分處理時間。如果您在處理過程中跟踪您的查詢,您會注意到對於每個維度屬性SELECT DISTINCT attributename FROM dimension_table都執行了 a。如果該維度表是一個視圖,並且在添加 where 後來自視圖的查詢速度較慢,則該維度處理可能會變慢time_the_view_is_slower * number_of_attributes.

您的視圖的選擇列表中有多少列在很大程度上無關緊要,您的維度中的屬性數

如果您在distinct count任何地方都有度量,那麼由於新的執行計劃,您的額外位置也可以插入排序操作。

所以在你的情況下,我的猜測是你的維度視圖變慢了,因為有效日期沒有被索引,或者查詢沒有足夠的選擇性,並且源查詢的添加處理時間誇大了減少的時間建立索引和聚合。

您很可能通過減少在多維數據集中使用較少數據計算的單元格數量來提高多維數據集瀏覽和 MDX 性能,但處理時間可能會因創建較慢的源查詢而增加,並且會乘以屬性。

再說一次,如果您將所有內容都保留為預設值,我不確定處理時間較長會出現什麼問題。SSAS 解決方案的性能應該比處理時間更重要。如果您因處理時間而遇到問題,這可能是另一個需要以其他方式解決的問題。

所以我想,最後,如果你擔心處理時間,要麼在源數據庫中載入更少的數據(這取決於你的設置,可以減少 ETL 載入時間),要麼通過相應地索引視圖來調整所有這些不同的查詢.

如果您想知道究竟是什麼減慢了您的處理速度,您可以跟踪更改前後的所有查詢並比較執行時間以查看哪些查詢正在殺死您。

引用自:https://dba.stackexchange.com/questions/124518