何时更改并行成本阈值

the*_*ony 10 performance sql-server

在检查性能问题时,我看到 CXPACKETS 的大量涌入,这表明我可能需要查看并行性和 MAXDOP 的成本阈值。

在对 MAXDOP 进行任何重大更改之前,我遵循了许多其他人的建议,包括 @mrdenny 在对 SQL Server 2008 的 CXPACKET 等待性能调整的回答中的建议和@aron-Bertrand 在处理 CXPACKET 等待中的回答- 设置成本阈值对于并行性。我已添加到维护中,以每晚完全更新统计数据。感觉这是一个明智的举动。

但是,对成本阈值进行修改仍然让我烦恼。

并行性的成本阈值应该在什么时候改变?有没有人有一个例子来说明(在检查了他们的查询和工作量的成本之后)他们对这个成本进行了更改?

如果这是在上一个问题中已回答的问题,请道歉。

谢谢!

Kin*_*hah 1

我建议您首先查看 MAXDOP 设置,因为默认设置 0(使用所有可用线程)可能很危险,因为消耗所有可用线程的失控查询将导致线程匮乏。

\n\n

请参阅我的答案,了解如何计算服务器实例的 MAXDOP 设置。

\n\n

并行成本阈值是指优化器考虑并行性之前的最低查询成本。

\n\n

请记住,CXPACKET 等待只是由于与查询相关的错误而导致的症状 - 过时的统计信息或丢失索引导致错误或不同的计划。

\n\n

您可以使用sys.dm_exec_cached_planssys.dm_exec_query_planDMV 从计划缓存中挖掘信息,如Jonathan 的 Tuning \xe2\x80\x98cost Threshold forparallelism\xe2\x80\x99 from the Plan Cache和Cost Threshold for Parallelism中所述。

\n\n

我建议保留cost threshold for parallelism默认值,除非您已耗尽资源调整查询、维护索引和统计信息以及检查是否没有任何丢失的索引,您的查询可能会受益。

\n\n

注意:Maxdop 设置也可以应用于查询级别,使用OPTION (MAXDOP n)它将覆盖服务器范围的设置。

\n