共用方式為


設定 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錯誤記錄檔中看到的資訊類型。

ssNoVersion

注意

從 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 相似性遮罩

  1. 對執行個體 A 執行下列陳述式,藉由設定 CPU 相似性遮罩來設定它使用 CPU 0、1、2 和 3:

    ALTER SERVER CONFIGURATION   
    SET PROCESS AFFINITY CPU=0 TO 3;  
    
  2. 對執行個體 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)