并行度和调度器使用

Pau*_*ite 4 sql-server parallelism execution-plan

以有效并行度 运行的 SQL Server 查询是否有可能x将并行工作器分配给多个x不同的调度程序?即使执行计划有许多并行区域?

Pau*_*ite 7

直到 SQL Server 2000 是;在 SQL Server 2005 及更高版本中,否。

根据 Craig Freedman 的Parallel Query Execution Presentation,直到 SQL Server 2000,任何并行工作线程都可以在任何 CPU 上运行。这意味着活动线程可能比 DOP 多,因此减少 DOP 可能实际上并不会降低 CPU 使用率。需要明确的是,如果单个并行查询x在执行计划中有多个并行分支/区域,它可能确实使用多个不同的调度程序。

从 SQL Server 2005 开始,该行为已更改,因此每个查询的调度程序数量仅限于 DOP。这意味着单个并行查询永远不会使用多于 DOP 的 CPU,因此减少 DOP 确实会降低 CPU 使用率。无论执行计划中有多少并行区域(分支),这都适用。

我的理解是 2005 年之前的行为是一个实施错误/疏忽。


注意:额外的并行工作线程仅限于 DOP 调度程序;例如,在具有 8 个可用调度程序的实例上以 DOP 4 运行的并行查询将为并行工作程序使用 4 个调度程序。整个查询可以使用 5 个调度程序:1 个由会话提供,另外 4 个用于额外的并行工作程序。