我的度量指标是否证明了需要更改 MAXDOP 设置?

我最近接手了一个具有8个虚拟CPU和8个物理核心的双实例虚拟化SQL Server。这是主机上唯一的虚拟机。 MAXDOP设置为默认值。 该服务器有100个高事务的特定供应商数据库,其中包含一些非常复杂的报表查询。 CXPacket等待在等待列表中占据63%的比例。 信号等待平均为15.50%。 在PerfMon中,处理器队列长度很少超过1。 这是否足以将MAXDOP设置为4或6?

2降低并行性的目的是增加并发性。如果你遇到了 CPU 排队问题,那么并发性似乎不是一个问题。我没有理由支持降低最大 DOP 的做法。不过我会想要去除多实例。 - Robert L Davis
3我不会太担心总等待时间。关于排名列表的有趣之处在于,总是有一项始终位居榜首。我会关注活动查询的等待时间,并找出那些遇到高CXPacket等待时间的查询,看看是否可以进行调优以提高运行效率。 - Robert L Davis
我同意上述所有内容,但这并不意味着MAXDOP在虚拟机或具有超线程的机器上不会成为问题。在尝试优化整体查询时,测试较低的MAXDOP可能是你要测试的众多因素之一。然而,我怀疑它能解决你的问题。 - Zane
通过减少CXPACKET等待来调整MAXDOP就像在你的车开始发出刺耳的噪音时调高收音机音量一样 - 症状消失了,但根本原因并没有解决。 - JNK
喜欢那个类比JNK。我在一篇博客文章中做了一个关于CXPacket等待的相似类比,叫做“咆哮的狗类比”:http://www.sqlsoldier.com/wp/sqlserver/thebarkingdoganalogy - Robert L Davis
1个回答

我会先调查CXPacket问题-看看是什么导致了这些问题。你能找出一些导致这些等待类型的查询吗?然后,你可以通过实际执行计划来查看问题的原因吗?你要关注“gather streams”步骤,并寻找不均匀的负载情况。试着找出这些问题的根源-一个可能的嫌疑对象是过时/无用的索引统计信息。