當 Windows 文件系統記憶體下降時,SSAS 查詢超時
我們在 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 文件記憶體行為
- 弄清楚為什麼它在一台物理伺服器上始終是一個問題,而不是另一台
以下是我的問題:
- 我認為這是 SSAS 的“正常”行為?有沒有辦法將整個 32GB 多維數據集強製到 SSAS 記憶體中,以完全消除從 Windows 文件記憶體中讀取的需要?
- 有沒有辦法確定究竟是什麼導致了這個記憶體刷新,為什麼它不會發生在(非常相似的)其他主機上?
- 還有其他方法可以緩解這個問題嗎??
我發現了一些對 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 。