我一直在研究数十个有关 MAXDOP 的网站,但我似乎缺少一些基本的东西。MAXDOP=0 使 SQL 能够使用所有可用的 CPU。MS 推荐的设置是设置 MAXDOP = CPU 的数量,如果小于 8,如果 CPU 有 8 个或更多,则设置 MAXDOP = 8(注意,还有一些更精细的点,例如,NUMA 等,但这是基本指导。)如果MAXDOP=0 启用所有 CPU,系统有 8 个或更少的 CPU,设置 MAXDOP=0 与设置 MAXDOP=#CPU 有何不同?难道它们都不会导致所有 x CPU 都可用吗?如果# of CPU's> 8,我可以看到这在哪里非常有意义。
谢谢!
对于 < =8 的核心,您仍然需要检查是否启用了超线程,因为这也是此处重要的一个因素。
同样对于单个 numa 上小于或等于 8 的内核,理想情况下要求将处理器数量保留为 # of 处理器,这是出现混淆的地方。理想情况下,在当今世界很难找到这样的服务器,因为如果您在少于 8 个内核上遇到问题并希望设置 MAxDOP,那么您将遇到更大的问题。
但是是的,少于 8 个或多或少将是相同的。但需要注意的是,即使设置为该 MAXDOP,查询过程也可能会或可能不会使用所有内核。此设置也应与并行性的成本阈值并行检查