我运行查询
select cpu_count, hyperthread_ratio, softnuma_configuration, softnuma_configuration_desc
from sys.dm_os_sys_info
并得到了结果,其中说 numa 已关闭:
cpu_count hyperthread_ratio softnuma_configuration softnuma_configuration_desc
32 16 0 OFF
然后我运行另一个查询
SELECT name, value, value_in_use, minimum, maximum, [description], is_dynamic, is_advanced
FROM sys.configurations WITH (NOLOCK)
ORDER BY name OPTION (RECOMPILE);
并得到结果,在哪里说,自动numa没有被禁用
name value value_in_use
automatic soft-NUMA disabled 0 0
正确的信息在哪里?
在任务管理器中,我看到 node0 和 node1。
我们在 Windows Server 2016 Standard 10.0 (构建 14393:)
我在日志中有这条消息 - 这是否意味着 NUMA 被正确使用并且我不需要做任何其他事情?
显示 8 个内核:
足够的信息让我猜测发生了什么,还不足以让我确定我的猜测是正确的:-)
这是我对一些细节的猜测,然后是基于这些细节的结果解释。我认为您使用的是裸机 Windows 服务器,而不是虚拟机。我认为服务器有两个套接字、两个处理器和两个 NUMA 节点。每个处理器有 8 个物理内核。启用了超线程,因此每个 NUMA 节点有 16 个逻辑处理器。
我猜这个系统是 SQL Server 2016 或更高版本。SQL Server 启动时,在两个 NUMA 节点中的每一个节点上检测每个插槽的 8 个物理内核(即使超线程意味着每个物理内核都作为两个逻辑处理器呈现给 Windows,并且每个逻辑处理器都有一个 SQLOS 调度程序)。
即使没有禁用 auto-softNUMA,autosoftNUMA 也不会干预并在此系统上创建 softNUMA 节点,因为每个 NUMA 节点的核心数不大于 8。因此结果有些混乱。Auto-softNUMA 未被禁用,因为 sys.configurations 中的 value = 0 表示“禁用自动 soft-NUMA”。
但是 auto-softNUMA 并没有在启动时干预 SQLOS 配置,如 sys.dm_os_sys_info 中的 softnuma_configuration_desc = 'OFF' 所示。
因此,该功能可用但没有做任何事情,因为每个 NUMA 节点 > 8 个物理内核的限定符没有得到满足。
Auto-softNUMA 作为 SQL Server 2016 中的“默认开启”功能引入(但只有在检测到每个插槽有足够的物理内核时才会执行任何操作)。该功能也包含在 SQL Server 2014 SP2 中;在该版本中,autosoftnuma 仅在启用启动跟踪标志 8079 并且检测到每个 NUMA 节点超过 8 个物理内核时才可用。我不知道在 SQL Server 2014 中是否有 autoSoftNUMA 的 sys.configurations 设置或 sys.dm_os_system_info 中的列可用 - 这就是为什么我猜测(并希望)问题所基于的系统是 SQL Server 2016 或之后。
上面的描述来自微软的跟踪标志文档。 DBCC TRACEON - 跟踪标志 (Transact-SQL)
SQL Server 日志将显示启动条目,包括来自询问硬件的处理器、NUMA 节点、核心和逻辑处理器信息。
启动时日志中的信息将与 sys.dm_os_nodes(此 dmv 包括 dac;其他节点如果设置为软节点,否则为 SQLOS 内存节点)和 sys.dm_os_memory_nodes(此 dmv 将包括 SQLOS)中显示的节点一致dac 的内存节点;其他内存节点都应该有自己的“主”NUMA 节点)。