为啥执行计划中的并行性不好[关闭]

Posted

技术标签:

【中文标题】为啥执行计划中的并行性不好[关闭]【英文标题】:Why is parallelism bad in execution plans [closed]为什么执行计划中的并行性不好[关闭] 【发布时间】:2020-11-01 17:22:10 【问题描述】:

人们似乎暗示,当黄色箭头出现在执行计划中时,这是一个不好的信号。为什么查询并行运行会出现问题?

【问题讨论】:

您的 SQL 服务器在将结果返回给您之前确实需要做一些额外的工作,如 here 所述。 "人们似乎在暗示,当黄色箭头出现在执行计划中时,这是一个不好的迹象" 在哪里?这些人是谁”?这是同事对你说的吗?如果是这样,当你问他们这件事时,他们给出了什么理由>?如果您在多篇文章中阅读此内容,这些文章/答案是什么?请引用并引用来源。 @Larnu:嗨,这只是语气,我没有直接听说并行性是“坏的”,而是语气。这是我从语气中推断出来的。还有例如sp_BlitzChace 有“Parallel”作为警告... @David 有一篇关于此的文章:sp_BlitzCache™ Result: Parallel Plans Detected。然而,请注意它说的第一件事是“这不一定是坏事”;因此为什么这是一个警告。您需要意识到存在并行性,但这并不意味着您应该摆脱它甚至是有害的。 【参考方案1】:

这不是一个坏兆头。根据某些设置,引擎可能决定使用并行运算符来优化某些 T-SQL 语句的执行。在大多数情况下,它会做出更好的选择(使用或不使用)。

如果您担心引擎无法做出更好的决定,您可以更改Max Degree of ParallelismCost Threshold For Parallelism。反正也有hints强制并行执行——Forced Parameterization。

我个人曾尝试强制并行操作并拒绝它们以调试/提高性能,但最后我总是让引擎而不是我来做出这些决定。

【讨论】:

以上是关于为啥执行计划中的并行性不好[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个执行计划中的 Sort 算子成本这么高?

为啥计划任务执行固定速率中的代码不起作用?

进程管理和计划任务

删除 where 子句然后添加回来时的执行计划优化

详解SQL优化必备:并行执行框架和执行计划

强制SQL Server执行计划使用并行提升在复杂查询语句下的性能