服务器配置:最大并行度

适用范围: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设置的更多详细信息,请参阅 本页中的“注意事项 ”部分。 SQL Server 考虑为查询、索引数据定义语言 (DDL) 操作、并行插入、联机更改列、并行统计信息集合以及静态的和由键集驱动的游标填充实施并行执行计划。

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

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

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

注意事项

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

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

0设置为max degree of parallelism允许 SQL Server 使用最多 64 个处理器的所有可用处理器。 但在大多数情况下,不推荐使用此值。 有关最大并行度的建议值的详细信息,请参阅此页中的建议部分。

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

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

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

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

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

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

建议

在 SQL Server 2016(13.x)及更高版本中,如果在启动时数据库引擎检测到每个 NUMA 节点或套接字超过 8 个物理核心,则默认会自动创建软 NUMA 节点。 数据库引擎 将相同物理内核中的逻辑处理器放入不同的 soft-NUMA 节点中。 下表中的建议旨在将并行查询的所有工作线程保留在同一软 NUMA 节点中。 这提高了工作负荷的 NUMA 节点之间的查询和工作线程分布的性能。 有关详细信息,请参阅 Soft-NUMA (SQL Server)

在 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) 和更高版本自动创建的软 NUMA 节点,或者如果禁用软 NUMA,则基于硬件的 NUMA 节点。

为 Resource Governor 工作负荷组设置“最大并行度”选项时,请使用这些相同的准则。 有关详细信息,请参阅 CREATE WORKLOAD GROUP

SQL Server 2014 及更早版本

从 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 权限由 sysadmin 和 serveradmin 固定服务器角色隐式拥有。

使用 SQL Server Management Studio 或 Azure Data Studio

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

这些选项更改 MAXDOP 实例。

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

  2. 选择“高级”节点。

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

使用 Transact-SQL

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

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

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

    USE master;
    GO
    
    EXECUTE sp_configure 'show advanced options', 1;
    GO
    
    RECONFIGURE WITH OVERRIDE;
    GO
    
    EXECUTE sp_configure 'max degree of parallelism', 16;
    GO
    
    RECONFIGURE WITH OVERRIDE;
    GO
    
    EXECUTE sp_configure 'show advanced options', 0;
    GO
    
    RECONFIGURE;
    GO
    

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

跟进:配置最大并行度选项后

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