天天看點

六、CPU優化(5)最大并行度

一、概念

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之間)。

六、CPU優化(5)最大并行度

2.SP_Config

  在下例中,将最大并行度設定為8,将并行的開銷閥值設定為10秒。

USEdb01;

GO

EXECsp_configure'showadvancedoptions',1;

RECONFIGUREWITHOVERRIDE;

EXECsp_configure'maxdegreeofparallelism',8;

EXECsp_configure'costthresholdforparallelism',10;

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值不應超過實體處理器的數量。

PTO