SQL Server 最大並行度


一、概念

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

 

 

本文結語:

  請根據業務負荷的特點,設置關聯掩碼和最大並行度。根據最佳實踐,最大並行度不要超過8。

 

 

注意:

另外一種關於(max degree of parallelism)的推薦設置是根據系統類型(也可以理解為系統負載)來設置,具體建議如下所示:

OLTP系統: 

  在純OLTP系統上,它的事務較短,SQL查詢時間短,但是非常頻繁。設置“Maximum degree of Parallelism”(MAXDOP)為1。這樣做可以確保查詢永遠不必使用並行方式運行,並且不會導致更多的數據庫引擎開銷。

OLAP系統:

Data-warehousing / Reporting server: 因為查詢執行時間一般較長,建議設置“Maximum degree of Parallelism”(MAXDOP)為0。

這樣大多數查詢將會利用並行處理,執行時間較長的查詢也會受益於多處理器而提高性能。

混合系統

Mixed System (OLTP & OLAP):這樣環境會是一個挑戰,必須找到正確的平衡點。一般采取了非常簡單的方法。設置“Maximum degree of

Parallelism”(MAXDOP)為2,這樣意味着查詢仍會使用並行操作但是僅利用2顆CPU。並且把“並行查詢閥值”(cost threshold for parallelism)設置為較高的值,這樣的話,不是所有的查詢都有資格使用並行,除了那些查詢成本較高的查詢………

 

image

cost threshold for parallelism 選項可設置為 0 到 32767 之間的任何值。默認值為 5。

 

個人比較傾向於第二種(max degree of parallelism)設置的指導方針,混合系統設置max degree of parallelism,建議結合第一種推薦設置與第二種,然后結合等待事件CXPACKET的情況,作出適當的調整。不要指望一成不變的推薦設置,這樣是不合理。只能根據比較大眾的推薦設置,然后結合自身系統的具體情況,作出適當的調整、優化。

 

對於NUMA與SMP不太清楚的地方,可以參考下面資料。

傳統的多核運算是使用SMP(Symmetric Multi-Processor )模式:將多個處理器與一個集中的存儲器和I/O總線相連。所有處理器只能訪問同一個物理存儲器,因此SMP系統有時也被稱為一致存儲器訪問(UMA)結構體系,一致性意指無論在什么時候,處理器只能為內存的每個數據保持或共享唯一一個數值。很顯然,SMP的缺點是可伸縮性有限,因為在存儲器和I/O接口達到飽和的時候,增加處理器並不能獲得更高的性能。

NUMA模式是一種分布式存儲器訪問方式,處理器可以同時訪問不同的存儲器地址,大幅度提高並行性。 NUMA模式下,處理器被划分成多個"節點"(node), 每個節點被分配有的本地存儲器空間。 所有節點中的處理器都可以訪問全部的系統物理存儲器,但是訪問本節點內的存儲器所需要的時間,比訪問某些遠程節點內的存儲器所花的時間要少得多。

SQL Server 2005開始支持NUMA,可參考SQL Server 2008的NUMA支持 。需要注意的是,硬件、操作系統、應用軟件 三者都要支持 NUMA ,才能充分利用這一特性

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM