如何将 SQL Server 配置为使用软件 NUMA
自动检测和使用非一致性内存访问 (NUMA)。如果要模拟大型 SMB 机器的 NUMA 或要细分 NUMA 机器以具有更好的位置性,可以使用软件 NUMA(软 NUMA)。若要将 SQL Server 配置为使用软 NUMA,必须编辑注册表以添加节点配置关联掩码。软件 NUMA 掩码可以表示为二进制或 DWORD(十六进制或十进制)注册表项。若要配置超过 32 个 CPU,请使用 BINARY 注册表值。要配置软件 NUMA,必须重新启动数据库引擎。配置软件 NUMA 之前,请参阅了解非一致性内存访问 和 SQL Server 如何支持 NUMA。
提示 |
---|
CPU 从 0 开始编号。 |
错误编辑注册表会严重损坏您的系统。更改注册表项之前,建议您备份计算机中的所有重要数据。
请参考如下示例。计算机有八个 CPU,但没有硬件 NUMA。配置了三个软件 NUMA 节点。将数据库引擎实例 A 配置为使用从 0 到 3 的 CPU。安装数据库引擎的第二个实例并将其配置为使用从 4 到 7 的 CPU。该示例可以直观表示为:
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 不同,它们都从同一个操作系统内存块中接收内存,并且不具有从内存到处理器的关联。
注意 |
---|
在升级 SQL Server 的实例时,不复制 Soft-NUMA 注册表项。 |
设置 CPU 关联掩码
在实例 A 中运行下面的语句,通过设置 CPU 关联掩码将它配置为使用 CPU 0、CPU 1、CPU 2 和 CPU 3:
ALTER SERVER CONFIGURATION SET PROCESS AFFINITY CPU=0 TO 3;
在实例 B 中运行下面的语句,通过设置 CPU 关联掩码将它配置为使用 CPU 4、CPU 5、CPU 6 和 CPU 7:
ALTER SERVER CONFIGURATION SET PROCESS AFFINITY CPU=4 TO 7;
将软件 NUMA 节点映射到 CPU
使用注册表编辑器程序 (regedit.exe) 添加以下注册表项,从而将软件 NUMA 节点 0 映射到 CPU 0 和 CPU 1、将软件 NUMA 节点 1 映射到 CPU 2 和 CPU 3,以及将软件 NUMA 节点 2 映射到 CPU 4、CPU 5、CPU 6 和 CPU 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
组
0
提示 若要指定 CPU 60 到 63,请使用 BINARY 值 1111000000000000000000000000000000000000000000000000000000000000。