如果实例MAXDOP
设置为1,并且查询提示用于允许特定查询并行进行,那么SQL仍然使用“并行成本阈值”来决定是否实际并行吗?
简单的答案:是的。
细节
这里有几个分开的事情,分开是很重要的:
可用于查询的有效最大并行度是多少?
造成这种情况的原因是(按重要性顺序大体上):
- 资源调控器
MAX_DOP
设置
- 查询提示
MAXDOP
设置
- 该
max degree of parallelism
实例配置选项
有关详细信息,请参见服务器的“最大并行度”设置,资源调控器的MAX_DOP和查询提示MAXDOP-SQL Server应该使用哪一个?作者:Microsoft SQL Server客户服务和支持的高级升级工程师Jack Li。下表是从该链接复制而来的:
查询计划会使用并行性吗?
SQL Server查询优化器始终首先找到一个串行计划 *。
然后,如果:
- 进一步优化是合理的;和
- 最佳串行计划的成本超过了
cost threshold for parallelism
配置值
...优化器将尝试找到并行计划。
然后,如果:
- 找到一个并行计划(即可能的);和
- 并行计划的成本低于最佳串行计划
将会制定平行计划
注:该cost threshold for parallelism
只影响是否优化查找一个并行计划。缓存并行计划后,无论CTFP设置如何,只要重用(只要线程可用),它将在并行使用时执行。
例子
对于两个示例,对于实例maxdop 1和查询提示maxdop 2,有效的可用DOP为2。如果选择了并行计划,它将使用DOP 2。
例子1
给定CTFP为50,而最便宜的串行计划发现成本为30,SQL Server将不会尝试找到并行计划。将会制定一个系列计划。
例子2
鉴于CTFP为50,而最便宜的串行计划发现成本为70,SQL Server将尝试找到并行计划。如果此计划(如果找到)的成本低于70(串行计划成本),则将生成并行计划。
查询优化的最终结果始终是单个缓存计划:串行或并行。只有优化查找一个串行计划搜索0(TP)和搜索1(QP)阶段。
然后,可以(如所述)重新运行search1并要求生成并行计划。然后根据到目前为止的最佳总体计划成本,在串行和并行之间进行选择。如果优化继续进行到search2(完全优化),则该选择具有约束力。优化的每个阶段都考虑许多替代方案,但是一个阶段的输出始终是单个最佳计划,可以是串行的也可以是并行的。
我在神话中写了一些这样的内容:SQL Server使用每个并行计划缓存一个串行计划