配置 max degree of parallelism(服务器配置选项)

适用于:SQL Server

本文介绍如何使用 SQL Server Management Studio、Azure Data Studio 或 Transact-SQL 在 SQL Server 中配置“max degree of parallelism (MAXDOP)”服务器配置选项。 当 SQL Server 实例在具有多个微处理器或 CPU 的计算机上运行时,数据库引擎 会检测是否可以使用并行。 并行度为每次并行计划的执行设置运行单个语句时要使用的处理器数。 您可以使用 max degree of parallelism 选项来限制执行并行计划时所用的处理器数量。 有关 max degree of parallelism (MAXDOP) 所设置的限制的详细信息,请参阅此页中的注意事项部分。 SQL Server 考虑为查询、索引数据定义语言 (DDL) 操作、并行插入、联机更改列、并行统计信息集合以及静态的和由键集驱动的游标填充实施并行执行计划。

注意

SQL Server 2019 (15.x) 介绍了有关在安装过程中如何基于可用处理器数量设置 MAXDOP 服务器配置选项的自动建议。 安装程序用户界面允许接受建议的设置或输入自己的值。 有关详细信息,请参阅“数据库引擎配置 - MaxDOP”页

在 Azure SQL 数据库和 Azure SQL 托管实例中,每个新的单一数据库、弹性池数据库以及托管实例的默认 MAXDOP 设置都是 8。 在 Azure SQL 数据库中,MAXDOP 数据库范围的配置设置为 8。 在 Azure SQL 托管实例中,max degree of parallelism (MAXDOP) 服务器配置选项设置为 8。

有关 Azure SQL 数据库 中 MAXDOP 的详细信息,请参阅在 Azure SQL 数据库中配置最大并行度 (MAXDOP)

开始之前

注意事项

  • 此选项是一个高级选项,仅应由有经验的数据库管理员或认证的 SQL Server 专业人员更改。

  • 如果 affinity mask 选项不设置为默认值,则可能会限制可用于对称多处理 (SMP) 系统上的 SQL Server 的处理器数。

  • 若将最大并行度 (MAXDOP) 设置为 0,SQL Server 将能够使用至多 64 个可用的处理器。 但在大多数情况下,不推荐使用此值。 有关最大并行度的建议值的详细信息,请参阅此页中的建议部分。

  • 若要取消生成并行计划,请将 max degree of parallelism 设置为 1。 将该值设置为 1 到 32,767 之间的数值来指定执行单个查询所使用的最大处理器核数。 如果指定的值比可用的处理器数大,则使用实际可用数量的处理器。 如果计算机只有一个处理器,则将忽略 max degree of parallelism 值。

  • 将按任务设置最大并行度限制。 它不是按请求限制或按查询限制。 这意味着在并行查询执行期间,一个请求可生成多个任务(不超过 MAXDOP 限制),并且每个任务将使用一个工作线程和一个计划程序。 有关详细信息,请参阅线程和任务体系结构指南中的“计划并行任务”部分。

  • 可重写“最大并行度”服务器配置值:

  • 索引操作(如创建或重新生成索引、或删除聚集索引)可能会大量占用资源。 您可以通过在索引语句中指定 MAXDOP 索引选项来覆盖索引操作的 max degree of parallelism 值。 MAXDOP 值在执行时应用于语句,但不存储在索引元数据中。 有关详细信息,请参阅 配置并行索引操作

  • 除了查询和索引操作之外,此选项还控制 DBCC CHECKTABLE、DBCC CHECKDB 和 DBCC CHECKFILEGROUP 的并行。 使用跟踪标志 2528,可以禁用这些语句的并行执行计划。 有关详细信息,请参阅跟踪标志 (Transact-SQL)

  • SQL Server 2022 (16.x) 引入了“并行度 (DOP) 反馈”,此新功能根据运行时间和等待时间来标识重复查询的并行低效率,从而提高查询性能。 DOP 反馈是智能查询处理功能系列的一部分,可解决重复查询的并行度使用率欠佳问题。 有关 DOP 反馈的信息,请访问并行度 (DOP) 反馈

建议

从 SQL Server 2016 (13.x) 开始,在服务启动期间,如果 数据库引擎 在启动时检测到每个 NUMA 节点或插槽内的物理内核数目超过 8 个,在默认情况下就会自动创建 soft-NUMA 节点。 数据库引擎 将相同物理内核中的逻辑处理器放入不同的 soft-NUMA 节点中。 下表中的建议旨在将并行查询的所有工作线程保持在相同 soft-NUMA 节点中。 这将提高跨工作负荷 NUMA 节点查询和分布工作线程的性能。 有关详细信息,请参阅 Soft-NUMA

从 SQL Server 2016 (13.x) 开始,请使用以下准则配置 max degree of parallelism 服务器配置值:

服务器配置 处理器数目 指南
具有单个 NUMA 节点的服务器 小于或等于 8 个逻辑处理器 将 MAXDOP 保持为小于或等于逻辑处理器的数量
具有单个 NUMA 节点的服务器 大于 8 个逻辑处理器 将 MAXDOP 保持为 8 个
具有多个 NUMA 节点的服务器 每个 NUMA 节点拥有小于或等于 16 个逻辑处理器 将 MAXDOP 保持为小于或等于每个 NUMA 节点的逻辑处理器的数量
具有多个 NUMA 节点的服务器 每个 NUMA 节点大于 16 个逻辑处理器 将 MAXDOP 保持为每个 NUMA 节点逻辑处理器数量的一半,最大值为 16

注意

上表中的 NUMA 节点是指,由 SQL Server 2016 (13.x) 及更高版本自动创建的 soft-NUMA 节点,或基于硬件的 NUMA 节点(如果 soft-NUMA 已遭禁用的话)。 为 Resource Governor 工作负荷组设置“最大并行度”选项时,请使用这些相同的准则。 有关详细信息,请参阅 CREATE WORKLOAD GROUP (Transact-SQL)

从 SQL Server 2008 (10.0.x) 到 SQL Server 2014 (12.x),请使用以下准则配置 max degree of parallelism 服务器配置值:

服务器配置 处理器数目 指南
具有单个 NUMA 节点的服务器 小于或等于 8 个逻辑处理器 将 MAXDOP 保持为小于或等于逻辑处理器的数量
具有单个 NUMA 节点的服务器 大于 8 个逻辑处理器 将 MAXDOP 保持为 8 个
具有多个 NUMA 节点的服务器 每个NUMA 节点拥有小于或等于 8 个逻辑处理器 将 MAXDOP 保持为小于或等于每个 NUMA 节点的逻辑处理器的数量
具有多个 NUMA 节点的服务器 每个 NUMA 节点大于 8 个逻辑处理器 将 MAXDOP 保持为 8 个

安全性

权限

默认情况下,所有用户都具备不带参数或仅带第一个参数的 sp_configure 的执行权限。 若要执行带两个参数的 sp_configure 以更改配置选项或运行 RECONFIGURE 语句,则用户必须具备 ALTER SETTINGS 服务器级别的权限。 ALTER SETTINGS 权限由 sysadminserveradmin 固定服务器角色隐式持有。

使用 SQL Server Management Studio 或 Azure Data Studio

在 Azure Data Studio 中,安装 Database Admin Tool Extensions for Windows 扩展或使用以下 T-SQL 方法。

配置“最大并行度”选项

这些选项可更改实例的 MAXDOP。

  1. 在“对象资源管理器”中,右键单击所需的实例,然后选择“属性”。

  2. 选择“高级”节点。

  3. “最大并行度” 框中,选择执行并行计划时所使用的最大处理器数。

使用 Transact-SQL

使用 T-SQL 配置“最大并行度”选项

  1. 使用 SQL Server Management Studio 或 Azure Data Studio 连接到数据库引擎。

  2. 在标准栏上,选择“新建查询”。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 此示例说明如何使用 sp_configuremax degree of parallelism 选项的值配置为 16

USE AdventureWorks2022;  
GO   
EXEC sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE WITH OVERRIDE;  
GO  
EXEC sp_configure 'max degree of parallelism', 16;  
GO  
RECONFIGURE WITH OVERRIDE;  
GO  

有关详细信息,请参阅服务器配置选项 (SQL Server)

跟进:在配置 max degree of parallelism 选项之后

该设置将立即生效,无需重新启动服务器。