Mar*_*sey 11 sql-server optimization parallelism sql-server-2012 maxdop
如果实例MAXDOP
设置为 1 并且查询提示用于允许特定查询并行执行,SQL 是否仍使用并行成本阈值值来决定是否实际并行执行?
我一直无法挖掘出这些特定信息,尽管此链接表明如果MAXDOP
为 1 ,则 CTFP 将被忽略。这在没有查询提示的情况下是有意义的,因为没有请求,无论成本如何,当MAXDOP
为 1时都会并行。
谁能让我知道这两个请求的预期行为是什么?
示例 1:
Instance Maxdop: 1
CTFP: 50
Query hint: Maxdop=2
Query cost: 30
Run Code Online (Sandbox Code Playgroud)
示例 2:
Instance Maxdop: 1
CTFP: 50
Query hint: Maxdop=2
Query cost: 70
Run Code Online (Sandbox Code Playgroud)
Pau*_*ite 20
如果实例
MAXDOP
设置为 1 并且查询提示用于允许特定查询并行执行,SQL 是否仍使用并行成本阈值值来决定是否实际并行执行?
简单的回答:是的。
这里有几个单独的事情,重要的是要分开:
查询可用的有效最大并行度是多少?
对此的贡献者是(大致按重要性排序):
MAX_DOP
设置MAXDOP
设置max degree of parallelism
实例配置选项服务器的“最大并行度”设置、资源调控器的 MAX_DOP 和查询提示 MAXDOP中解释了详细信息——SQL Server 应该使用哪一个?作者:Jack Li,Microsoft SQL Server 客户服务和支持高级上报工程师。下表是从该链接复制的:
查询计划会使用并行性吗?
SQL Server 查询优化器总是首先找到串行计划*.
那么,如果:
cost threshold for parallelism
配置值
...优化器将尝试找到一个并行计划。
那么,如果:
...将产生一个平行计划。
注:该cost threshold for parallelism
只影响是否优化查找一个并行计划。一旦并行计划被缓存,无论 CTFP 设置如何,它都会在重用时使用并行性执行(只要线程可用)。
对于这两个示例,实例 maxdop 1 和查询提示 maxdop 2,有效可用 DOP为 2。如果选择并行计划,它将使用 DOP 2。
假定 CTFP 为 50,最便宜的串行计划发现成本为 30,SQL Server 将不会尝试寻找并行计划。将产生一个系列计划。
假设 CTFP 为 50,最便宜的串行计划成本为 70,SQL Server 将尝试找到并行计划。如果此计划(如果找到)的成本低于 70(串行计划成本),则将生成并行计划。
查询优化的最终结果始终是单个缓存计划:串行或并行。只有优化查找一个串行计划搜索0(TP)和搜索1(QP)阶段。
然后它可以(如所述)重新运行search1并要求生成并行计划。然后根据迄今为止的最佳整体计划成本在串行和并行之间做出选择。如果优化转移到search2(完全优化),则该选择具有约束力。优化的每个阶段都会考虑许多备选方案,但一个阶段的输出始终是一个最佳计划,可以是串行的或并行的。
我在Myth: SQL Server Caches a Serial Plan with every Parallel Plan 中写到了其中的一些内容
归档时间: |
|
查看次数: |
4001 次 |
最近记录: |