Sql-Server

當 Windows 文件系統記憶體下降時,SSAS 查詢超時

  • December 14, 2011

我們在 Windows 2003 上有一個 SQL 2008 Analysis Services 實例,它在高峰活動期間幾乎每天都會遇到性能問題(查詢超時)。從同一應用程序查詢的第二個相同實例(使用循環 IP 進行負載平衡)沒有相同的問題。我們甚至切換了兩個實例,問題似乎“停留”在物理伺服器上。我們知道這不是 SSAS 配置問題。立方體每天重建一次。

以下是我們能夠確定的:當Memory\System Cache Resident Bytes perfmon 計數器意外下降時發生超時(我們一直將其稱為“記憶體刷新”)。例如,今天早上它在大約 2 分鐘內從大約 14GB 下降到 8.4GB。發生這種情況時,Memory:Page Reads/sec從 0 跳到 800-1200,事情開始橫向發展。

您可以看到對 MSOLAP 計數器的直接影響:Storage Engine Query\Data reads/sec從 50,000 危險地下降到 5,000(這些顯然不是物理讀取,而是從系統記憶體中讀取;這通過類似的下降得到證實程序(msmdsrv)\IO 讀取操作/秒)。儲存引擎查詢\平均時間/查詢從 500-2000 攀升至 20,000-50,000,並且查詢開始超時。Threads\Processing 池繁忙執行緒從 ~50 跳到最大配置值 240,並且Threads\Processing 池作業隊列長度開始攀升。

在接下來的 30 分鐘左右,查詢繼續超時,直到(我認為)文件記憶體被失去的數據重新填充。Memory\Page Reads/sec回落到接近於零,並且事情似乎恢復到“正常”。

在整個過程中, Process(msmdsrv):Working Set (~10.5GB) 、Process(Total):Working Set (~13.9GB) 或MSOLAP:Memory\Memory Usage KB (~50GB)沒有顯著變化。這是一個 48 核伺服器,128GB RAM,只執行 SSAS(另一個沒有問題的伺服器是 24 核機器,我們沒有發現它們之間的任何其他顯著差異)。

實例記憶體設置如下:

<TotalMemoryLimit>80000000000</TotalMemoryLimit>
<LowMemoryLimit>70000000000</LowMemoryLimit>
<PreAllocate>40000000000</PreAllocate>

特別基於Memory Usage KB,我不認為記憶體是一個問題,除了弄清楚為什麼 SSAS 不使用其內部記憶體來記憶體整個多維數據集(多維數據集大約 32GB)。

我們目前正在努力優化多維數據集和查詢設計(我高度懷疑這會使問題完全消失)。

與此同時,我們需要

  • 了解此 windows 文件記憶體行為
  • 弄清楚為什麼它在一台物理伺服器上始終是一個問題,而不是另一台

以下是我的問題:

  1. 我認為這是 SSAS 的“正常”行為?有沒有辦法將整個 32GB 多維數據集強製到 SSAS 記憶體中,以完全消除從 Windows 文件記憶體中讀取的需要?
  2. 有沒有辦法確定究竟是什麼導致了這個記憶體刷新,為什麼它不會發生在(非常相似的)其他主機上?
  3. 還有其他方法可以緩解這個問題嗎??

我發現了一些對 SSAS 和 windows 文件記憶體的其他引用(例如,在此處找到的連結),但這些似乎暗示文件記憶體是一件壞事,並談論一個故意刷新記憶體的實用程序,這似乎是與我需要的相反。

編輯:增加了 100pt 的賞金

我相信您看到了 Windows 2003 需要連續記憶體的問題的症狀,這會導致包括分析服務在內的正在執行的程序修剪其工作集記憶體。由於分配了大量記憶體,此修剪過程可能需要大量時間才能完成,而在此執行時,新分配將被阻止,導致程序停止。此問題在 Windows 2008 及更高版本中已修復此支持文章適用於 SQL Server,但包含指向相關頁面http://support.microsoft.com/kb/918483的所有連結,特別是此引用

在 Windows Server 2008 中,物理上連續記憶體的分配得到了極大的增強。分配連續記憶體的請求更有可能成功,因為記憶體管理器現在動態替換頁面,通常不修剪工作集或執行 I/O 操作。此外,更多類型的頁面(例如核心堆棧和文件系統元數據頁面等)現在是替換的候選對象。因此,更連續的記憶體通常在任何給定時間都可用。此外,獲得此類分配的成本也大大降低。

我相信對於這個問題,您要麼必須升級到 Windows 2008 或更高版本,要麼測試將記憶體中的鎖定頁面授予 Analysis Services 帳戶。我在 Windows 2003 上也遇到了記憶體分配問題,需要重新啟動才能清除。

這個 SQLCAT部落格比較了 Windows Server 2003 和 2008 之間的變化。

這篇部落格提到了 LPIM with Analysis Services 的一些問題(接近尾聲)

還有這篇關於工作集修整導致性能問題的知識庫文章和這篇文章展示瞭如何辨識分配連續記憶體的驅動程序

您提到雖然兩台伺服器都有 128GB 的​​ RAM,但問題盒有 48 個核心,而工作盒有 24 個。128GB / 48 核心是您的主機板支持或推薦的配置嗎?

我不記得確切的細節,但我曾經在一些伺服器上工作過,它們提供更好的記憶體吞吐量,8 核上的 24GB RAM 超過 32GB RAM。

您可以嘗試將 SSAS 處理器親和性設置為僅 24 個核心,看看情況是否有所改善。

有關詳細資訊,請參閱sqlCat 中的WSRM 。

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