使用 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 中的并行性是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章
MSSQL 重建索引(在线重建控制最大处理器数 MAXDOP )
<s:select>下拉选框中多出了<option value="key">,如何去掉此option?