ソフト NUMA を使用するように SQL Server を構成する方法
NUMA (Non-Uniform Memory Access) は自動的に検出されて使用されます。大規模な SMB コンピューターの NUMA をシミュレートする場合、または局所性の向上のために NUMA コンピューターを分割する場合、ソフトウェア NUMA (ソフト NUMA) を使用できます。ソフト NUMA を使用するように SQL Server を構成するには、レジストリを編集して、ノード構成 affinity mask を追加する必要があります。ソフト NUMA マスクは、バイナリまたは DWORD (16 進数または 10 進数) レジストリ エントリとして記述できます。最初の 32 個より多くの CPU を構成するには BINARY レジストリ値を使用します。ソフト NUMA を構成するには、データベース エンジンを再起動する必要があります。ソフトウェア NUMA を構成する前に、「Non-Uniform Memory Access について」と「SQL Server での 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 スレッドと 2 つのレイジー ライター スレッドが存在するようになります。一方、プロセッサに負荷が集中する操作を実行するインスタンス B には、1 つの I/O スレッドと 1 つのレイジー ライター スレッドしかありません。異なる量のメモリをこれらのインスタンスに割り当てることができますが、ハードウェア NUMA とは異なり、どちらもオペレーティング システムの同じメモリ ブロックからメモリを受け取るのでメモリおよびプロセッサ間の関係はありません。
![]() |
---|
SQL Server のインスタンスをアップグレードするときに Soft-NUMA レジストリ キーはコピーされません。 |
CPU affinity mask の設定
インスタンス A で次のステートメントを実行し、CPU affinity mask を設定して CPU 0、1、2、および 3 を使用するように構成します。
ALTER SERVER CONFIGURATION SET PROCESS AFFINITY CPU=0 TO 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; 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 にマッピングします。
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
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 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
Group
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
Group
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
Group
0
ヒント
CPU 60 ~ 63 を指定するには BINARY 値 1111000000000000000000000000000000000000000000000000000000000000 を使用します。