本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

设置 MAXDOP 以获得最佳性能最大并行度 (MAXDOP) 是一个服务器配置选项,用于在多个 CPU 上运行 SQL Server。它控制用于在并行计划执行中运行单个语句的处理器数量。原定设置值为 0,这将使 SQL Server 使用所有可用的处理器。这可能会影响性能,而且对于大多数用例来说并不是最佳选择。

在为 SQL Server 配置最大并行度 (MAXDOP) 值时,请遵循以下准则。

NUMA 节点

逻辑处理器

最大并行度 (MAXDOP) 值

单列排序

≤ 8

4、2 或内核数量(用于一个或两个内核)

单列排序

> 8

8、4 或 2

多个

≤ 16

8、4 或 2

多个

> 16

16、8、4 或 2

注意在大多数用例中,将最大并行度 (MAXDOP) 设置为 2、4 或 8 通常可以获得最佳结果。我们建议您测试工作负载并监控任何与并行度相关的等待类型,例如 CXPACKET。

您可以使用以下查询来收集 SQL Server 2016 及更高版本的当前 NUMA 配置:

select @@SERVERNAME,

SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),

cpu_count,

hyperthread_ratio,

softnuma_configuration,

softnuma_configuration_desc,

socket_count,

numa_node_count

from

sys.dm_os_sys_info其中:

cpu_count 指系统中逻辑 CPU 的数量。

hyperthread_ratio 是一个物理处理器暴露的内核数量之比。

softnuma_configuration 为 0、1 或 2:

0 (OFF): 默认值

1 (automated):基于软件的 NUMA

2 (manual):基于软件的 NUMA

softnuma_configuration_desc 为 OFF、ON 或 MANUAL:

OFF 表示基于软件的 NUMA 功能已关闭。

ON 表示 SQL Server 会自动决定 NUMA 节点的大小。

MANUAL 表示基于软件的 NUMA 为手动配置。

socket_count 是处理器插槽的数量。

numa_node_count 是系统中可用的 NUMA 节点的数量。

要检查当前最大并行度 (MAXDOP) 值,请使用:

$ sp_configure 'max_degree_of_parallelism'有关最大并行度 (MAXDOP) 的更多信息,请参阅 Microsoft SQL Server 文档。