ソフト NUMA (SQL Server)

適用対象:SQL Server

最新のプロセッサには、1 つのソケットに対して複数のコアがあります。 各ソケットは、通常、1 つの NUMA ノードとして表示されます。 SQL Server データベース エンジンは、さまざまな内部構造を分割し、NUMA ノード単位でサービス スレッドを分割します。 1 つのソケットに対してコアを 10 個以上含むプロセッサの場合、ソフトウェア NUMA を使用してハードウェア NUMA ノードを分割すると、一般的に、拡張性と性能が向上します。 SQL Server 2014 (12.x) SP2 より前の場合、ソフトウェア ベースの NUMA (ソフト NUMA) ではレジストリを編集し、ノード構成関係マスクを追加する必要がありました。また、ソフト NUMA は、インスタンス単位ではなく、ホスト レベルで構成されていました。 SQL Server 2014 (12.x) SP2 および SQL Server 2016 (13.x) 以降では、ソフト NUMA は、SQL Server データベース エンジン サービスの起動時にデータベース/インスタンス レベルで自動的に構成されます。

ホット アド プロセッサは、ソフト NUMA ではサポートされていません。

自動ソフト NUMA

SQL Server 2016 (13.x) では、SQL Server データベース エンジンの起動時に NUMA ノードまたはソケットあたり 8 個を超える物理コアが検出されるたびに、ソフト NUMA ノードが既定で自動的に作成されます。 ノード内の物理コア数をカウントする場合、同時マルチスレッド (SMT) プロセッサ コアは区別されません。 物理コアの検出数がソケットあたり 8 個を超えると、SQL Server データベース エンジン でソフト NUMA ノードが作成されます。その場合、8 個のコアが含まれていることが理想的ですが、ノードあたり 5 個から 9 個の論理コアを含めることができます。 ハードウェア ノードのサイズは CPU 関係マスクにより制限されます。 NUMA ノードの数がサポートされる NUMA ノードの最大数を超えることはありません。

ALTER SERVER CONFIGURATION (Transact-SQL) ステートメントと SET SOFTNUMA 引数を使用し、ソフト NUMA を無効化したり、再有効化したりすることができます。 この設定の値を変更した場合、その変更を適用するには、データベース エンジンを再起動する必要があります。

下の図は、SQL Server で、ノードまたはソケットあたり 8 個を超える物理コアが含まれるハードウェア NUMA ノードが検出されたときに SQL Server エラー ログに表示される、ソフト 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.

Note

SQL Server 2014 (12.x) SP 2 以降では、トレース フラグ 8079 を使用して SQL Server が自動ソフト NUMA を使用できるようにします。 SQL Server 2016 (13.x) 以降では、この動作はエンジンによって制御されるようになり、トレース フラグ 8079 に効力はありません。 詳細については、「DBCC TRACEON - トレース フラグ」を参照してください。

手動ソフト NUMA

ソフト NUMA を使用できるように SQL Server を手動で構成するには、自動のソフト NUMA を無効化し、レジストリを編集してノード構成関係マスクを追加します。 この方法を利用すると、ソフト NUMA マスクは、バイナリ、DWORD (16 進数または 10 進数)、または QWORD (16 進数または 10 進数) のレジストリ エントリとして記述できます。 最初の 32 個を超える CPU を構成するには、QWORD または BINARY のレジストリ値を使用します (SQL Server 2012 (11.x) より前では QWORD 値を使用できません)。 レジストリの変更後、ソフト NUMA 構成を適用するには データベース エンジン を再起動する必要があります。

ヒント

CPU には、0 から始まる番号が付けられます。

警告

レジストリを誤って編集すると、システムに重大な障害が発生する場合があります。 レジストリを変更する前に、コンピューター上のすべての重要なデータをバックアップしてください。

たとえば、8 個の CPU が搭載されたコンピューターにハードウェア NUMA がないとします。 3 つのソフト NUMA ノードが構成されています。
データベース エンジン インスタンス A は、CPU 0 から 3 を使用するように構成されています。 データベース エンジン の 2 つ目のインスタンスがインストールされており、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 には、現在、2 つの I/O スレッドと 1 つのレイジー ライター スレッドがあります。 プロセッサに負荷が集中する操作を実行するインスタンス B には、1 つの I/O スレッドと 1 つのレイジー ライター スレッドしかありません。 異なる量のメモリをこれらのインスタンスに割り当てることができますが、ハードウェア NUMA とは異なり、どちらもオペレーティング システムの同じメモリ ブロックからメモリを受け取るのでメモリおよびプロセッサのアフィニティはありません。

レイジー ライター スレッドは、物理 NUMA メモリ ノードの SQLOS ビューに関連付けられています。 したがって、ハードウェアが物理 NUMA ノード数として表すものは、作成されるレイジー ライター スレッドの数になります。 詳細については、「How It Works:Soft NUMA, I/O Completion Thread, Lazy Writer Workers and Memory Nodes」 (動作方法: ソフト NUMA、I/O 完了スレッド、レイジー ライター ワーカー、およびメモリ ノード) を参照してください。

Note

のインスタンスをアップグレードするときに ソフト NUMA SQL Serverレジストリ キーはコピーされません。

CPU affinity mask の設定

インスタンス A で次のステートメントを実行し、CPU affinity mask を設定して CPU 0、1、2、および 3 を使用するように構成します。

ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 0 TO 3;

インスタンス B で次のステートメントを実行し、CPU affinity mask を設定して CPU 4、5、6、および 7 を使用するように構成します。

ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 4 TO 7;

CPU へのソフト NUMA ノードのマッピング

レジストリ エディター プログラム (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 を使用します。

次の例では、1 ソケットにつき 18 個のコア (4 ソケットを装備) を備え、各ソケットがそれぞれ独自の K グループに属する DL580 G9 サーバーを使用するとします。 作成する可能性のあるソフト NUMA 構成は、例として、ノードごとに 6 コア、グループごとに 3 ノード、および 4 グループのようになります。

複数の K グループを持つ SQL Server インスタンスの例 Type 値の名前 値データ
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0 DWORD CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0 DWORD Group 0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1 DWORD CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1 DWORD Group 0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2 DWORD CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2 DWORD Group 0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3 DWORD CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3 DWORD Group 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4 DWORD CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4 DWORD Group 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5 DWORD CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5 DWORD Group 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6 DWORD CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6 DWORD Group 2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7 DWORD CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7 DWORD Group 2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8 DWORD CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8 DWORD Group 2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9 DWORD CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9 DWORD Group 3
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10 DWORD CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10 DWORD Group 3
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11 DWORD CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11 DWORD Group 3

Metadata

次の DMV を使用して、ソフト NUMA の現在の状態と構成を表示できます。

sp_configure (Transact-SQL) を利用することにより、自動ソフト NUMA の実行中の VALUE を表示できますが、sp_configure でその VALUE を変更することはできません。 SET SOFTNUMA 引数と共に ALTER SERVER CONFIGURATION (Transact-SQL) を使用する必要があります。