Windows-Server-2008

Windows Server 2008 上的 SSAS 2008 記憶體壓力嚴重

  • May 4, 2011

我有一個 SQL Server 2008 Analysis Services 實例,在 Windows Server 2008 x64 上執行,伺服器上有 8GB 的​​ RAM。記憶體的所有設置都保留為預設值。

當 SSAS 服務啟動時,它會正常執行。但是,每當對實例執行查詢時,SSAS 服務都會持續消耗伺服器上的所有記憶體,以至於需要重新啟動伺服器。目前,TotalMemoryLimit 和 LowMemoryLimit 設置分別設置為 80% 和 75%。HardMemoryLimit 預設設置為 0。

儘管有限制設置,為什麼 SSAS 會使用伺服器上的所有記憶體?是否需要設置 HardMemoryLimit?

我會檢查性能計數器以確認究竟是什麼在使用記憶體 - 不清楚您是否使用任務管理器來辨識使用情況。分析服務應在總記憶體限制處達到其記憶體峰值。查詢是否繼續執行?- 為什麼你必須重新啟動?是要殺死正在進行的查詢嗎?我會檢查更清潔的計數器以查看問題是否存在 - 最終您可能只需要為正在執行的查詢添加更多記憶體或查看您的多維數據集設計

來自 technet SQL Server 2005 Analysis Services (SSAS) 伺服器屬性

SSAS 有一個特殊的記憶體“清理器”後台執行緒,它不斷確定是否需要清理記憶體。清理程序查看使用的記憶體量。清理程序使用以下基本過程來控制分析伺服器使用的物理記憶體量:

如果使用的記憶體高於 TotalMemoryLimit 屬性中設置的值,則清理程序會清除此值。

如果使用的記憶體低於 LowMemoryLimit 屬性中設置的值,則清理程序不執行任何操作。

如果使用的記憶體介於 LowMemoryLimit 和 TotalMemoryLimit 屬性中設置的值之間,則清理程序會根據需要清理記憶體。

如果任何這些屬性中指定的值介於 0 和 100 之間,則 SSAS 將該值視為總物理記憶體的百分比。如果指定的值大於 100,則 SSAS 將該值視為絕對記憶體值(以字節為單位)。請注意,當分析伺服器正在處理時,如果它需要超過 TotalMemoryLimit 中指定的值的額外記憶體,它將嘗試保留該數量,而不管 TotalMemoryLimit 值如何。

請注意,MaxTotalMemory 沒有對 Analysis Services 使用的記憶體量定義硬限制。相反,它是一個軟限制,用於辨識伺服器遇到記憶體壓力的情況。對於某些操作(例如處理),如果 Analysis Services 需要超出 Memory\TotalMemoryLimit 值的額外記憶體,Analysis Services 伺服器會嘗試保留該記憶體,而不考慮屬性的值。

簡而言之,TotalMemoryLimit 可以在重負載期間向上傳遞。

SSASPerfGuide

$$ W $$當並行處理多個分區或在單個事務中處理整個多維數據集時,您必須確保所需的總記憶體不超過 Memory\TotalMemoryLimit 設置的值。如果 Analysis Services 在處理期間達到 Memory\TotalMemoryLimit,則它不允許聚合緩衝區增長,並且可能會導致在聚合處理期間使用臨時文件。

此外,大多數人在具有 SQL 的機器上執行 SSAS。請記住為 OS 和輕服務保留 1.5-2GB,設置並添加 SQL 記憶體最小值(1GB?2?)加上大約 0.5GB 用於 SQL 成本(記憶體設置緩衝區記憶體大小,而不是 sql 使用的所有記憶體)。現在基於此設置記憶體限制百分比。100-(100*(os+sql)/總計)。

如果您有 4gb 用於 SQL 和 os,則將 TotalMemoryLimit 設置為 50 (100-(100*4/8))。請注意臨時文件問題…如果它佔用了您盒子上的所有記憶體,那麼全立方體處理可能真的需要那麼多工作空間!

引用自:https://serverfault.com/questions/116321