一、概念
1.关联掩码(affinitymask)
为了执行多任务,MicrosoftWindows2000和WindowsServer2003有时会在不同的处理器之间移动进程线程。虽然从操作系统方面而言,这种活动是高效的,但是在高系统负荷的情况下,该活动会降低SQLServer的性能,因为每个处理器缓存都会不断地重新加载数据。如果将各个处理器分配给特定线程,则通过消除处理器的重新加载需要以及减少处理器之间的线程迁移(因而减少上下文切换),可以提高在这些条件下的性能;线程与处理器之间的这种关联称为“处理器关联”。
SQLServer通过以下两个关联掩码选项来支持处理器关联:affinitymask(也称为CPUaffinitymask)和affinityI/Omask。对具有33到64个处理器的服务器的CPU和I/O关联支持要求分别使用affinity64mask服务器配置选项和affinity64I/Omask服务器配置选项(这2个服务器配置选项仅在64位操作系统上可用)。http://technet.microsoft.com/zh-cn/library/ms187104.aspx
注意:
SQLServer2012联机手续中提到,后续版本的SQLServer将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功能的应用程序。
2.并行的开销阈值(costthresholdforparallelism)
costthresholdforparallelism选项指定SQLServer创建和运行并行查询计划的阈值。仅当运行同一查询的串行计划的估计开销高于在“并行的开销阈值”中设置的值时,SQLServer才创建和运行该查询的并行计划。开销指的是在特定硬件配置中运行串行计划估计需要花费的时间(秒)。“并行的开销阈值”选项可设置为0到32767之间的任何值。默认值为5。
3.最大并行度(maxdegreeofparallelism)
可以使用maxdegreeofparallelism选项来限制并行计划执行时所用的处理器数。SQLServer考虑为查询、索引数据定义语言(DDL)操作、静态的和由键集驱动的游标填充实施并行执行计划。
除了查询和索引操作之外,此选项还控制DBCCCHECKTABLE、DBCCCHECKDB和DBCCCHECKFILEGROUP的并行。使用跟踪标志2528,可以禁用为这些语句所做的并行执行计划。
查询执行计划如何确定最大并行度?一般按照以下准则:
(1)若要使服务器能够确定最大并行度,请将此选项设置为默认值0。
(2)若将maximumdegreeofparallelism设置为0,SQLServer将能够使用至多64个可用的处理器。
(3)若要取消生成并行计划,请将maxdegreeofparallelism设置为1。
(4)将该值设置为1到32,767之间的数值来指定执行单个查询所使用的最大处理器核数。如果指定的值比可用的处理器数大,则使用实际可用数量的处理器。
(5)如果计算机只有一个处理器,将忽略maxdegreeofparallelism值。
4.MAXDOP
您可以通过在查询语句中指定MAXDOP查询提示来覆盖查询中的maxdegreeofparallelism值。
索引操作(如创建或重新生成索引、或删除聚集索引)可能会大量占用资源。您可以通过在索引语句中指定MAXDOP索引选项来覆盖索引操作的maxdegreeofparallelism值。MAXDOP值在执行时应用于语句,但不存储在索引元数据中。http://technet.microsoft.com/zh-cn/library/ms189329.aspx
二、配置服务器配置选项
1.SSMS
在服务器(实例)的“属性”窗口选择“高级”节点。
在“最大并行度”框中,选择执行并行计划时所使用的最大处理器数。
在“并行”下,将“并行的开阀值”选项更改为所需值,键入或选择一个值(介于0到32767之间)。
2.SP_Config
在下例中,将最大并行度设置为8,将并行的开销阀值设置为10秒。
USEdb01;
GO
EXECsp_configure'showadvancedoptions',1;
GO
RECONFIGUREWITHOVERRIDE;
GO
EXECsp_configure'maxdegreeofparallelism',8;
EXECsp_configure'costthresholdforparallelism',10;
GO
RECONFIGUREWITHOVERRIDE;
GO
3.效果
在配置maxdegreeofparallelism和CostThresholdForParallelism选项之后,这些设置将立即生效,无需重新启动服务器。
三、最佳实践建议
使用sp_configure将maxdegreeofparallelism选项设置为8或小于8的值。将此选项设置为大于8的值通常导致不必要的资源消耗和性能下降。
http://support.microsoft.com/kb/329204
请遵循以下准则:
(1)对于使用8个以上的处理器的服务器使用以下配置:MAXDOP=8。
(2)服务器的有8个或更少的处理器,使用下列配置其中N等于处理器数:MAXDOP=0到N。
(3)对于具有NUMA配置的服务器,MAXDOP不应超过分配给每个NUMA节点的cpu数。
(4)超线程已启用的服务器的MAXDOP值不应超过物理处理器的数量。