Joh*_*ler 7 sql-server sql-server-2016 numa
我在我们的一台 SQL Server 2016 生产服务器上运行 sp_blitz,结果之一是 CPU 的核心数为奇数。详细消息表明这是一个非常糟糕的 NUMA 配置。
如果 SQL Server 2016 检测到超过 8 个内核的物理处理器,它将使用自动软 NUMA。我们的特定服务器有两个插槽,每个插槽有 10 个 CPU。
SQL Server 错误日志中的启动消息表明:
自动软 NUMA 已启用,因为 SQL Server 检测到具有超过 8 个物理内核的硬件 NUMA 节点。
结果,SQL Server 创建了四个逻辑 NUMA 节点,每个节点有 5 个内核。
这是性能问题吗?
我们使用 MAXDOP = 4。
这里的并行性是一个问题吗?
我们无法回答您的“是否存在性能问题?”的问题。只有你能回答这个问题。您在生产中获得可接受的性能吗?我可以告诉你,我知道一个生产系统可以通过四个插槽(每个插槽有 10 个 CPU,每个插槽启用自动软 NUMA)获得可接受的性能,因此,使用具有奇数的软 NUMA 节点并不是不可能获得可接受的性能需求。调度程序的数量。
如果您怀疑更改 NUMA 配置可以提高性能,那么您应该考虑对此进行测试。据我所知,这实际上完全取决于您的工作量。您拥有的三个选择是保留自动软 NUMA、禁用自动软 NUMA,或者尝试通过更改注册表来手动配置取消关联的 CPU 或手动软 NUMA。我不确定我是否掌握了下面的所有详细信息,但您可能会发现有关更改配置时 SQL Server 中发生的更改的信息会很有帮助。
惰性写入器的数量由物理 NUMA 节点的数量决定,因此 soft-NUMA 不会改变它。在 SQL Server 2016 中最多可以有四个事务日志写入器,其中 SQL Server 中的每个 NUMA 节点有一个。这些事务日志写入器不会均匀分布在 NUMA 节点上:它们根据需要分配给 CPU 1、2、3 和 4。每个逻辑 NUMA 节点将拥有一个资源监视器。我相信每个逻辑 NUMA 节点还将有 1 个I/O 完成线程,但我没有具体研究过这一点,也不知道是否有限制。
也许浏览一些示例配置会有所帮助。假设您禁用自动软 NUMA。对于该配置,您将在 SQL Server 中拥有 2 个逻辑 NUMA 节点,其中包含 10 个调度程序、2 个资源监视器、2 个惰性写入器、2 个 I/O 完成线程和 2 个事务日志写入器。您将不再看到该sp_blitz发现。
现在假设您启用自动软 NUMA。对于该配置,您将在 SQL Server 中拥有 5 个调度程序的 4 个逻辑 NUMA 节点、4 个资源监视器、2 个惰性写入器、4 个 I/O 完成线程和 4 个事务日志写入器。
使用手动软 NUMA,您可以执行诸如创建 3 个软 NUMA 节点之类的操作,其中每个节点有 2 个调度程序、4 个调度程序和 4 个调度程序。这也将避免这一sp_blitz发现。您还可以使每个插槽 2 个 CPU 对 SQL Server 不可见,在这种情况下,每个插槽有 8 个调度程序,并且自动软 NUMA 将不适用。对我来说,这两种配置听起来都相当奇怪。
那么,哪些配置最适合您的工作负载?使用 4 个事务日志编写器(而不是 2 个)会使您的工作负载受益吗?使用 4 个而不是 2 个资源监视器会损害您的工作负载吗?我不知道。您所能做的就是对其进行基准测试。我无法从 Microsoft 找到任何有关自动软 NUMA 何时可能损害性能的信息。他们的观点似乎是,它通常会提高性能和可扩展性,除非您遇到性能问题,否则请将其保留。IMO 将 MAXDOP 4 查询发送到 5 个调度程序的 4 个软 NUMA 节点对我来说听起来一点也不坏。