根据 Craig Freedman 的并行查询执行演示文稿,直到 SQL Server 2000,任何并行工作线程都可以在任何 CPU 上运行。这意味着可能有比 DOP 更多的活动线程,因此减少 DOP 实际上可能不会减少 CPU 使用率。x需要明确的是,如果执行计划中有多个并行分支/区域,则单个并行查询可能确实使用多个不同的调度程序。
该行为从 SQL Server 2005 开始发生了变化,因此每个查询的调度器数量限制为 DOP。这意味着单个并行查询永远不会使用超过 DOP 的 CPU,因此减少 DOP 确实会减少 CPU 使用率。无论执行计划中并行区域(分支)的数量如何,这都适用。
SQL Server 2000 是;在 SQL Server 2005 及更高版本中,没有。
根据 Craig Freedman 的并行查询执行演示文稿,直到 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 个用于额外的并行工作程序。