軟體 NUMA (SQL Server)

適用於:SQL Server

現代處理器的每個插槽有多個核心。 每個插槽通常代表單一 NUMA 節點。 SQL Server 資料庫引擎資料分割將每個 NUMA 節點分為內部結構和資料分割服務執行緒。 只要有了在每個插槽都含有 10 個或更多核心的處理器,使用軟體 NUMA 分割硬體 NUMA 節點通常會增加延展性和效能。 在 SQL Server 2014 (12.x) SP2 之前,軟體式 NUMA 會要求您編輯登錄來新增節點組態親和性遮罩,並且是在主機層級進行設定,而不是根據執行個體。 從 SQL Server 2014 (12.x) SP2 和 SQL Server 2016 (13.x) 開始,當 SQL Server 資料庫引擎啟動時,soft-NUMA 會自動設定為資料庫執行個體層級。

軟體 NUMA 不支援熱新增處理器。

自動軟體 NUMA

只要有了 SQL Server 2016 (13.x),每當 SQL Server 資料庫引擎在啟動時於每個 NUMA 節點或通訊端偵測到超過 8 個實體核心,就會根據預設值自動建立 soft-NUMA 節點。 當計算節點中的實體核心時,不會區分同步多執行緒(SMT) 處理器核心。 當偵測到每個通訊端的實體核心超過八個時,SQL Server 資料庫引擎會建立 soft-NUMA 節點,此節點在理想情況下會包含八個核心,但可以減少至每個節點五個或增加至最多九個邏輯核心。 硬體節點的大小可由 CPU 關連遮罩限制。 NUMA 節點數目永遠不會超過支援的 NUMA 節點數目上限。

您可以搭配使用 ALTER SERVER CONFIGURATION (Transact-SQL) 陳述式與 SET SOFTNUMA 引數來停用或重新啟用 soft-NUMA。 變更此設定值需要重新啟動資料庫引擎才會生效。

下圖顯示當 SQL Server 偵測到硬體 NUMA 節點在每個節點或通訊端有超過八個實體核心時,您會在 SQL Server 錯誤記錄檔中看到的 soft-NUMA 資訊類型。

2016-11-14 13:39:43.17 Server      SQL Server detected 2 sockets with 12 cores per socket and 24 logical processors per socket, 48 total logical processors; using 48 logical processors based on SQL Server licensing. This is an informational message; no user action is required.
2016-11-14 13:39:43.35 Server      Automatic soft-NUMA was enabled because SQL Server has detected hardware NUMA nodes with greater than 8 physical cores.
2016-11-14 13:39:43.63 Server      Node configuration: node 0: CPU mask: 0x0000000000555555:0 Active CPU mask: 0x0000000000555555:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2016-11-14 13:39:43.63 Server      Node configuration: node 1: CPU mask: 0x0000000000aaaaaa:0 Active CPU mask: 0x0000000000aaaaaa:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2016-11-14 13:39:43.63 Server      Node configuration: node 2: CPU mask: 0x0000555555000000:0 Active CPU mask: 0x0000555555000000:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2016-11-14 13:39:43.63 Server      Node configuration: node 3: CPU mask: 0x0000aaaaaa000000:0 Active CPU mask: 0x0000aaaaaa000000:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.

注意

從 SQL Server 2014 (12.x) SP2 開始,請使用追蹤旗標 8079 讓 SQL Server 使用自動 Soft-NUMA。 從 SQL Server 2016 (13.x) 開始,此行為由引擎控制,且追蹤旗標 8079 沒有任何作用。 如需詳細資訊,請參閱 DBCC TRACEON - 追蹤旗標

手動軟體 NUMA

若要手動設定 SQL Server 使用 soft-NUMA,請停用自動 soft-NUMA,並編輯登錄來新增節點組態親和性遮罩。 當使用此方法時,軟體 NUMA 遮罩可陳述為二進位、DWORD (十六進位或十進位) 或 QWORD (十六進位或十進位) 登錄項目。 若要設定超過前 32 個 CPU,請使用 QWORD 或 BINARY 登錄值 (在 SQL Server 2012 (11.x) 之前無法使用 QWORD 值)。 在修改登錄之後,您必須重新啟動資料庫引擎,soft-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 記憶體節點的 SQLOS 檢視。 因此,只要硬體呈現為數個實體 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。

提示

若要指定 CPU 60 到 63,請使用 的 QWORD 值 F000000000000000 或 的 BINARY 值 1111000000000000000000000000000000000000000000000000000000000000

下列範例假設您有 DL580 G9 伺服器。該伺服器的每個插槽 (共有四個插槽) 安裝有 18 顆核心,且每個插槽各位在其 K 群組中。 您可建立的軟體 NUMA 設定可能如下所示:每個節點有六個核心、每個群組有三個節點、四個群組。

包含多個 K 群組的 SQL Server 伺服器範例 類型 值名稱 值資料
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0 下載 CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0 下載 Group 0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1 下載 CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1 下載 Group 0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2 下載 CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2 下載 Group 0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3 下載 CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3 下載 Group 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4 下載 CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4 下載 Group 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5 下載 CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5 下載 Group 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6 下載 CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6 下載 Group 2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7 下載 CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7 下載 Group 2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8 下載 CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8 下載 Group 2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9 下載 CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9 下載 Group 3
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10 下載 CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10 下載 Group 3
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11 下載 CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11 下載 Group 3

中繼資料

您可以使用下列 DMV 來檢視軟體 NUMA 的目前狀態和設定。

雖然您可以使用 sp_configure (Transact-SQL) 檢視自動 soft-NUMA 執行中的值,但您無法使用 sp_configure 變更其值。 您必須搭配使用 ALTER SERVER CONFIGURATION (Transact-SQL) 陳述式與 SET SOFTNUMA 引數。