我在 AWS i3.16xlarge 上运行 SQL Server 2022 RC1 设置,具有 2 个套接字、2 个 NUMA 节点、每个节点 32 个逻辑处理器、总共 64 个逻辑处理器。
安装程序推荐 MAXDOP 8:
但是,如果您单击该链接来配置 MAXDOP,建议会说:
根据那篇知识库文章,MAXDOP 应该是 16,而不是 8。当然,从技术上讲,8 小于 16 - 但 2、4 或 15 也是如此。8 来自哪里?
SQL Server 安装完成并启动服务后,日志显示 SQL Server 正在自动实现具有 4 个节点的 Soft-NUMA,每个节点具有 16 个逻辑处理器:
同样,这表明 MAXDOP 应该是 16。
这是一个错误,还是我错过了一些明显的东西?设置将在 MAXDOP 8 停止的地方是否还有其他不成文的规则?
安装程序计算 MAXDop 如下:
在您的具体情况下:
将使用软 NUMA,64 LPs/4(软)= 16。16 > 15,取 16 / 2 = 8。
人们是否同意额外的 /2,给定 >15 LPs/NUMA 是一个讨论点。无论如何,这就是当前存在的内容,并且确实符合
MSDNTechNetBOLDocsLearn 文章推荐的内容。我理解您想了解为什么 SQL Server 安装程序推荐 8 用于 MAXDOP。不幸的是,在默认条件下(启用自动软 NUMA),文档将推荐几乎所有服务器的 MAXDOP 可接受范围,而不是精确的单个值。
该文档说明了以下内容:
您的服务器有两个启用超线程的套接字。每个插槽有 16 个物理核心,每个插槽有 32 个逻辑核心。也启用了自动软 NUMA。下面是关于 auto soft-NUMA 如何处理这种情况的估计图表,其中 A 列是每个套接字的调度程序数量:
对于您的服务器,您最终将拥有 4 个软 NUMA 节点,每个节点有 16 个逻辑处理器。这意味着第 3 行的指导适用于您的情况:
MAXDOP 值 8 小于每个软 NUMA 节点 16 个逻辑处理器的值,因此与文档没有冲突。
在启用自动软 NUMA 时,该文档似乎并未针对大多数情况提供准确的指导。只有第 2 行和第 4 行给出了精确的指导,而不是可接受的 MAXDOP 范围。对于第 2 行,使用自动软 NUMA 获得该结果的唯一方法是启用具有 10 到 16 个逻辑内核的超线程的单插槽服务器。对于第 4 行,在启用自动软 NUMA 的情况下无法获得该结果。
回到 SQL Server 设置的工作原理以及选择 8 的原因,它可能没有在任何地方记录。我不再处于可以使用大型服务器进行测试的位置,因此我无法寻找导致默认值大于 8 的服务器配置。话虽如此,微软多年来一直建议在各种情况下不超过 8地方。例如:_
这些报价适用于 Azure SQL 数据库,因此它们并不直接适用于您的情况,但我认为它说明了 Microsoft 持有的一般心态,即超过 MAXDOP 8 是“高级性能调整练习”。
就个人而言,您的服务器硬件配置的 MAXDOP 8 感觉是一个合理的起点。除非有一些驱动工作量因素,否则我不会从 MAXDOP 16 开始。考虑通常认为并行工作器分布的最佳性能结果:所有工作器应该在同一个硬 NUMA 节点上的不同物理内核上。如果没有 TF 2467 或虚拟机管理程序技巧,您的工作线程将如何分布的可能性如下:
MAXDOP 16 只保证 9% 的时间获得最佳结果。
就个人而言,我不相信微软在这方面的文档做得很好。其中包含许多模棱两可、误导性或完全不正确的陈述。详细的想法在这里。