本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设置 MAXDOP 以获得最佳性能
最大并行度 (MAXDOP) 是一个服务器配置选项,用于在多个服务器上运行 SQL Server。 CPUs它控制用于在并行计划执行中运行单个语句的处理器数量。原定设置值为 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
指系统 CPUs 中逻辑的数量。 -
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 文档