SQL Server中的最大並行度(max degree of parallelism)如何設置呢? 設置max degree of parallelism有什么好的建議和指導方針呢?在微軟官方文檔Recommendations and guidelines for the "max degree of parallelism" configuration option in SQL Server有這方面的建議和指導方針
Use the following guidelines when you configure the MAXDOP value.
SQL Server 2005 and later versions
Server with single NUMA node |
Less than 8 logical processors |
Keep MAXDOP at or below # of logical processors |
Server with single NUMA node |
Greater than 8 logical processors |
Keep MAXDOP at 8 |
Server with multiple NUMA nodes |
Less than 8 logical processors per NUMA node |
Keep MAXDOP at or below # of logical processors per NUMA node |
Server with multiple NUMA nodes |
Greater than 8 logical processors per NUMA node |
Keep MAXDOP at 8 |
個人覺得上面關於(max degree of parallelism)的建議、指導方針有點抽象、不太科學。因為不同的系統的負載可能不一樣。這樣一個籠統的建議實在讓人覺得缺少合理的依據。
另外一種關於(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)設置為較高的值,這樣的話,不是所有的查詢都有資格使用並行,除了那些查詢成本較高的查詢………
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 ,才能充分利用這一特性
參考資料:
https://msdn.microsoft.com/zh-cn/library/ms181007(v=sql.105).aspx
https://support.microsoft.com/en-us/kb/2806535
http://dbanotes.net/database/numa.html
https://technet.microsoft.com/zh-cn/library/ms188603(SQL.90).aspx