設定 SQL Server 使用軟體 NUMA (SQL Server)
現代處理器在每個插槽有許多核心。 每個插槽通常代表單一 NUMA 節點。 SQL Server 資料庫引擎資料分割將每個 NUMA 節點分為內部結構和資料分割服務執行緒。 透過每個通訊端包含 10 個以上核心的處理器,使用軟體 NUMA (軟體 NUMA) 分割硬體 NUMA 節點通常會增加延展性和效能。
注意
軟體 NUMA 不支援熱新增處理器。
自動軟體 NUMA
從 SQL Server 2014 Service Pack 2 開始,每當資料庫引擎伺服器在啟動時偵測到超過 8 個實體處理器時,如果啟用追蹤旗標 8079 作為啟動參數,系統會自動建立軟體 NUMA 節點。 計算實體處理器時,不會考慮超執行緒處理器核心。 當偵測到的實體處理器數目超過每個通訊端 8 個時,資料庫引擎服務會建立最理想的包含 8 個核心的軟式 NUMA 節點,但每個節點最多可減少到 5 個或最多 9 個邏輯處理器。 硬體節點的大小可由 CPU 關連遮罩限制。 NUMA 節點數目將永遠不會超過支援的 NUMA 節點數目上限。
如果沒有追蹤旗標,預設會停用軟體 NUMA。 您可以使用追蹤旗標 8079 來啟用軟體 NUMA。 變更此設定值需要重新啟動資料庫引擎才會生效。
下圖顯示有關軟體 NUMA 的資訊類型,當您SQL Server偵測到大於 8 個邏輯處理器的硬體 NUMA 節點時,以及已啟用追蹤旗標 8079 時,您會在SQL Server錯誤記錄檔中看到的資訊類型。
注意
從 SQL Server 2016 開始,此行為是由引擎控制,追蹤旗標 8079 沒有任何作用。
手動軟體 NUMA
若要將SQL Server設定為手動使用軟體 NUMA,您必須編輯登錄以新增節點設定親和性遮罩。 軟體 NUMA 遮罩可陳述為二進位、DWORD (十六進位或十進位) 或 QWORD (十六進位或十進位) 登錄項目。 若要設定超過前 32 個 CPU,請使用 QWORD 或 BINARY 登錄值 (QWORD 值無法在 SQL Server 2012.) 之前使用,您必須重新開機 Database Engine 以設定軟體 NUMA。
提示
CPU 編號從 0 開始。
不當編輯登錄可能會造成系統嚴重受損。 在變更登錄之前,我們建議您備份電腦上的所有重要資料。
請思考一下下列範例。 一部具有八個 CPU 的電腦沒有硬體 NUMA。 三個軟體 NUMA 節點已設定。 資料庫引擎執行個體 A 是設定成使用 CPU 0 到 3。 資料庫引擎的第二個執行個體安裝及設定為使用 CPU 4 到 7。 此範例可以視覺化方式表示如下:
CPUs 0 1 2 3 4 5 6 7
Soft-NUMA <-N0--><-N1-><----N2---->
SQL Server <instance A ><instance B>
發生大量 I/O 的執行個體 A,現在有兩個 I/O 執行緒和一個延遲寫入器執行緒,而執行處理器密集作業的執行個體 B,只有一個 I/O 執行緒和一個延遲寫入器執行緒。 不同記憶體數量可指派給執行個體,但與硬體 NUMA 不同,它們都是從相同作業系統記憶體區塊接收記憶體,而沒有記憶體對處理器的相似性。
延遲寫入器執行緒會繫結至實體 NUMA 記憶體節點的 SQL OS 檢視。 因此,呈現為實體 NUMA 節點的任何硬體都將等於建立的延遲寫入器執行緒數目。 如需詳細資訊,請參閱 How It Works:Soft NUMA, I/O Completion Thread, Lazy Writer Workers and Memory Nodes(運作方式:軟體 NUMA、I/O 完成執行緒、LAZY WRITER 背景工作角色和記憶體節點)。
注意
當您升級 SQL Server 執行個體時,不會複製 Soft-NUMA 登錄機碼。
設定 CPU 相似性遮罩
對執行個體 A 執行下列陳述式,藉由設定 CPU 相似性遮罩來設定它使用 CPU 0、1、2 和 3:
ALTER SERVER CONFIGURATION SET PROCESS AFFINITY CPU=0 TO 3;
對執行個體 B 執行下列陳述式,藉由設定 CPU 相似性遮罩來設定它使用 CPU 4、5、6 和 7:
ALTER SERVER CONFIGURATION SET PROCESS AFFINITY CPU=4 TO 7;
將軟體 NUMA 節點對應到 CPU
使用 [登錄編輯程式] (regedit.exe),加入下列登錄機碼,以便將軟體 NUMA 節點 0 對應到 CPU 0 和 1、將軟體 NUMA 節點 1 對應到 CPU 2 和 3,並且將軟體 NUMA 節點 2 對應到 CPU 4、 5、6 和 7。
下列範例假設您有 DL580 G9 伺服器。該伺服器的每個插槽 (共有 4 個插槽) 安裝有 18 顆核心,且每個插槽各位在其 K 群組中。 您可以建立類似下列的軟體 numa 組態 (每個節點 6 顆核心、每個群組 3 個節點、4 個群組)。
具有多個 K 群組的 SQL Server 2014 伺服器範例 類型 值名稱 值資料 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node0 DWORD CPUMask 0x3F HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node0 DWORD 群組 0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node1 DWORD CPUMask 0x0fc0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node1 DWORD 群組 0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node2 DWORD CPUMask 0x3f000 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node2 DWORD 群組 0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node3 DWORD CPUMask 0x3F HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node3 DWORD 群組 1 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node4 DWORD CPUMask 0x0fc0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node4 DWORD 群組 1 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node5 DWORD CPUMask 0x3f000 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node5 DWORD 群組 1 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node6 DWORD CPUMask 0x3F HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node6 DWORD 群組 2 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node7 DWORD CPUMask 0x0fc0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node7 DWORD 群組 2 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node8 DWORD CPUMask 0x3f000 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node8 DWORD 群組 2 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node9 DWORD CPUMask 0x3F HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node9 DWORD 群組 3 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node10 DWORD CPUMask 0x0fc0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node10 DWORD 群組 3 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node11 DWORD CPUMask 0x3f000 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node11 DWORD 群組 3 其他範例:
SQL Server 2014 類型 值名稱 值資料 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node0 DWORD CPUMask 0x03 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node0 DWORD 群組 0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node1 DWORD CPUMask 0x0c HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node1 DWORD 群組 0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node2 DWORD CPUMask 0xf0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node2 DWORD 群組 0 提示
若要指定 CPU 60 到 63,請使用 QWORD 值 F000000000000000 或 BINARY 值 1111000000000000000000000000000000000000000000000000000000000000。
SQL Server 2012 類型 值名稱 值資料 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\NodeConfiguration\Node0 DWORD CPUMask 0x03 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\NodeConfiguration\Node0 DWORD 群組 0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\NodeConfiguration\Node1 DWORD CPUMask 0x0c HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\NodeConfiguration\Node1 DWORD 群組 0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\NodeConfiguration\Node2 DWORD CPUMask 0xf0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\NodeConfiguration\Node2 DWORD 群組 0 SQL Server 2008 R2 類型 值名稱 值資料 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node0 DWORD CPUMask 0x03 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node0 DWORD 群組 0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node1 DWORD CPUMask 0x0c HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node1 DWORD 群組 0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node2 DWORD CPUMask 0xf0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node2 DWORD 群組 0 SQL Server 2008 類型 值名稱 值資料 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node0 DWORD CPUMask 0x03 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node1 DWORD CPUMask 0x0c HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node2 DWORD CPUMask 0xf0 SQL Server 2005 類型 值名稱 值資料 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\NodeConfiguration\Node0 DWORD CPUMask 0x03 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\NodeConfiguration\Node1 DWORD CPUMask 0x0c HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\NodeConfiguration\Node2 DWORD CPUMask 0xf0
另請參閱
將 TCP/IP 連接埠對應到 NUMA 節點 (SQL Server)
affinity mask 伺服器組態選項
ALTER SERVER CONFIGURATION (Transact-SQL)