我正在一个AWSi3.16xLarge上运行Server 2022 RC1安装程序,其中包含两个套接字、两个NUMA节点、每个节点32个逻辑处理器、总共64个逻辑处理器。
安装程序建议MAXDOP 8:
但是,如果您单击用于配置MAXDOP的链接,建议如下:
基于这篇知识库文章,MAXDOP应该是16,而不是8。当然,从技术上说,8小于16 --但2、4或15也是如此。8来自哪里?
在SQL Server安装完成并服务启动后,日志显示SQL Server将使用4个节点自动实现软NUMA,每个节点都有16个逻辑处理器:
因此,这再次表明MAXDOP应该是16。
这是一个bug,还是我错过了一些显而易见的东西?还有另一个不成文的规则,设置将停止在MAXDOP 8?
发布于 2022-11-03 18:42:36
我理解您希望了解为什么SQL Server安装程序推荐8用于MAXDOP。不幸的是,在默认情况下(启用自动软-NUMA),文档将推荐几乎所有服务器的MAXDOP的可接受范围,而不是精确的单个值。
文件说明如下:
上表中的NUMA节点是指Server 2016 (13.x)和更高版本自动创建的软NUMA节点,如果软NUMA已被禁用,则为基于硬件的NUMA节点。
您的服务器有两个启用超线程的套接字。每个套接字有16个物理核,每个套接字有32个逻辑核。自动软-NUMA也被启用。下面是自动软NUMA如何处理这种情况的估计图表,其中A列是每个套接字的调度程序数:
对于您的服务器,您将得到4个软NUMA节点,每个节点由16个逻辑处理器组成。这意味着第3行的指导原则适用于你的情况:
将MAXDOP保持在每个NUMA节点的逻辑处理器的#或以下
MAXDOP值小于每个软NUMA节点的16个逻辑处理器的值,因此与文档没有冲突。
当自动软NUMA启用时,这些文档似乎并不能为大多数场景提供准确的指导。只有第2行和第4行提供精确的指导,而不是可接受的MAXDOP范围。对于第2行,获得自动软NUMA结果的唯一方法是启用超线程的单个套接字服务器,该服务器具有10到16个逻辑核。对于第4行,如果启用了自动软NUMA,则无法获得该结果。
回到Server安装程序是如何工作的,以及它为什么选择8,它可能在任何地方都没有文档化。我不再能够在大型服务器上进行测试,因此我无法寻找导致默认值大于8的服务器配置。尽管如此,多年来,微软一直建议在不同的地方不超过8。对于示例:
在Azure SQL数据库中,每个新的单一数据库和弹性池数据库的默认MAXDOP设置为8。此默认设置防止不必要的资源利用率,同时仍然允许数据库引擎使用并行线程更快地执行查询。通常不需要在Azure SQL数据库工作负载中进一步配置MAXDOP,尽管它作为高级性能优化练习可能会带来好处。2020年9月,基于Azure SQL数据库服务MAXDOP 8中多年的遥测,将MAXDOP 8作为新数据库的缺省值,作为最广泛的客户工作负载的最佳值。此默认设置有助于防止过度并行导致的性能问题。
这些引号是针对Azure SQL数据库的,因此它们不直接适用于您的情况,但我认为它说明了Microsoft的普遍心态,即超越MAXDOP 8是一项“高级性能调优练习”。
就个人而言,用于服务器硬件配置的MAXDOP 8似乎是一个合理的起点。我不会从MAXDOP 16开始,除非有一些驾驶工作量因素。考虑一般认为的并行工作分配的最佳性能结果:所有工作人员都应该位于同一硬NUMA节点上的不同物理核心上。如果没有TF 2467或虚拟机管理程序的技巧,下面是如何分配工作线程的几率:
MAXDOP 16只保证了9%的最佳结果。
就我个人而言,我不认为微软在这方面的文档是非常好的。其中包含了一些模棱两可的、误导性的或简单的不正确的陈述。关于这一点的详细想法是这里。
https://dba.stackexchange.com/questions/319145
复制相似问题