Sql-Server

Sql server 中跨 numa 節點的記憶體分佈

  • January 24, 2019

我需要了解 sql server 中跨 numa 節點的記憶體分佈的以下行為

目前設置:

SQL server 2014 SP2禁用虛擬化的2 節點集群

我們有 4 個 NUMA 節點和 4 個插槽,每個 20 個核心,使用基於 ent 核心的許可,總共有 80 個邏輯處理器可用。盒子上的總記憶體為 1 TB,最大記憶體為 656 GB 到 sql

當我檢查記憶體使用情況時,每個 numa 節點將根據最大記憶體/numa 節點數擁有自己的:

因此,所有 4 個 numa 節點的總節點記憶體為 164 GB。

但是,當我檢查每個節點上的可用空閒時,它們相差很大,即 numa 節點 0 有 256 MB 可用,節點 1 有 127,節點 3 有 111,4 有 28。

同樣,當我檢查 PLE 時,它在所有 numa 節點上的響應也類似——即在平均節點 1 的 ple 為 687、2 的 ple 為 699、3 的 ple 333 和 4 的 122。我知道這些 PLE 只是 avg 和 max min全天變化。

但是這種不均勻分佈會導致性能問題,還是有可以實施的改變?謝謝

對於具有 1TB RAM 和超過 600 GB 專用於 SQL Server 的系統,300 到 600 秒的頁面預期壽命似乎非常低。這表明緩衝池中的每個頁面平均每 5 到 10 分鐘被替換一次。這意味著伺服器正在經歷大量的 I/O,只是為了服務查詢——例如每分鐘 100GB(或更多)的數據從磁碟傳輸到記憶體,一直如此。我建議通過以下方式提高 PLE:

  1. 查找執行過多 I/O 的查詢。檢查是否可以通過添加適當的索引或使用中間#temp 表將大型查詢分解為較小的塊來優化這些查詢以避免過度讀取。
  2. 添加物理記憶體。在這個註釋中,為什麼機器有 1TB 記憶體時最大伺服器記憶體設置為 656GB?您將在桌子上留下 250GB,SQL Server 可能會非常喜歡使用它。確保此伺服器專用於僅執行 SQL Server,並將 max_server_memory 增加到至少 900GB,也許更多。我會將最小伺服器記憶體設置為 768GB,以確保 Windows 可以在確實需要時從 SQL Server 中“收回”一些記憶體。

在極端情況下,您可能希望根據MSDN 部落格文章中列出的選項配置執行緒關聯。跟踪標誌 2479 可用於啟用“連接綁定”執行緒放置,將執行緒放置在一個節點上。SQL Server 將執行緒視為連接節點是系統上的唯一節點,強制任何給定查詢的執行緒由客戶端連接開始的 NUMA 節點處理。對於該頁面,只要節點上的空閒執行緒 >=(並行度 * 查詢中的分支),就允許並行。

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