CPU优化(5)最大并行度

发表于2016-11-25
评论0 3k浏览

一、概念

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值不应超过物理处理器的数量。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: