使用 OPTION (MAXDOP 1) 减少 SQL Server 中的并行性是不是安全?

Posted

技术标签:

【中文标题】使用 OPTION (MAXDOP 1) 减少 SQL Server 中的并行性是不是安全?【英文标题】:It is safe to use OPTION (MAXDOP 1) to reduce parallelism in SQL Server?使用 OPTION (MAXDOP 1) 减少 SQL Server 中的并行性是否安全? 【发布时间】:2021-06-14 02:37:03 【问题描述】:

我正在尝试使用 OPTION (MAXDOP 1) 优化 SQL Server 存储过程,这样可以避免执行计划的并行性,但我的问题是,使用它是否安全?

我读过它可能会导致结果出现一些错误,而在其他网站上他们说不推荐,所以我的问题是?使用安全吗?

在不使用OPTION (MAXDOP n)的情况下,还有其他方法可以避免并行性吗?

谢谢

【问题讨论】:

“我正在尝试使用 OPTION (MAXDOP 1”) 优化 SQL Server 存储过程 - 你最好确保拥有“正确”的索引并且统计信息是最新的。 并在您的问题中包含确切的建议和参考。 【参考方案1】:

是的,可以安全使用。

设置OPTION (MAXDOP 1) 是documented query hint,因此受支持。如果带有此提示的查询返回错误的结果,这将是一个错误并会得到修复。

注意“错误的结果”与“不同的结果”不是一回事。可以编写一个查询,其结果取决于查询计划的选择。例如,一个没有 ORDER BY 的 TOP 10 查询将根据计划的选择返回不同的 TOP 10

【讨论】:

使用安全,但不一定是好建议!【参考方案2】:

这一切都取决于查询的执行计划。如果查询由于并行性而有很多 CXPACKET 等待,我们可以查看将 MAXDOP 设置为 1 是否有助于查询。在设置此选项之前需要对其进行测试。

最好有正确的索引,而不是使用这些类型的查询提示。因为,优化器更清楚地决定是否采用并行计划。

另外,请参阅以下文章了解更多信息:

https://www.brentozar.com/archive/2019/12/microsofts-guidance-on-how-to-set-maxdop-has-changed/

https://www.mssqltips.com/sqlservertip/2650/what-maxdop-setting-should-be-used-for-sql-server/

What is the purpose for using OPTION(MAXDOP 1) in SQL Server?

【讨论】:

以上是关于使用 OPTION (MAXDOP 1) 减少 SQL Server 中的并行性是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

用户级别的最大并行度 (MAXDOP)

MSSQL 重建索引(在线重建控制最大处理器数 MAXDOP )

我应该避免在减少中使用对象传播吗?

<s:select>下拉选框中多出了<option value="key">,如何去掉此option?

css select dropdown bold on some <option>'s

在 App Insights 中,如何将文本标签分配给 X 轴值?