2008-10-02 167 views
41

我從來沒有清楚地瞭解MAXDOP的用法。我知道它使查詢更快,並且它是我可以用於查詢優化的最後一項。在SQL Server中使用OPTION(MAXDOP 1)的目的是什麼?

但是,我的問題是,何時何地最適合在查詢中使用?

+1

提到您應包括SQL Server的版本和服務包。這可能已在更高版本中得到修復... – 2008-12-19 02:54:07

回答

18

這是SQL Server中並行性的泛泛,它可能不會直接回答你的問題。

從聯機叢書,在MAXDOP:

設置查詢處理器可用於執行 單一索引的語句處理器 的最大數量。可能會使用更少的 處理器,具體取決於當前系統的工作負載。

關於並行性和CXPACKET等待類型請參見Rickie Lee's blog。這很有趣。

一般來說,在一個OLTP數據庫中,我的觀點是,如果一個查詢如此昂貴,需要在多個處理器上執行,那麼查詢需要重新編寫成更有效率的東西。

爲什麼添加MAXDOP(1)可以獲得更好的結果?很難說沒有實際的執行計劃,但它可能非常簡單,因爲執行計劃完全不同於沒有OPTION,例如使用MERGE或HASH聯接使用不同索引(或更可能)以不同方式聯接。

20

正如Kaboing提到的那樣,MAXDOP(n)實際上控制查詢處理器中正在使用的CPU內核的數量。

在完全空閒的系統上,SQL Server將嘗試儘快將表拉入內存,並在內存中將它們連接起來。這可能是,在你的情況下,最好用一個CPU來完成。這可能與使用OPTION (FORCE ORDER)相同,這會強制查詢優化器使用您指定的連接順序。在某些情況下,我看到OPTION (FORCE PLAN)將查詢從26秒減少到1秒的執行時間。

聯機叢書接着說,對於MAXDOP可能的值是:

0 - 使用取決於當前的系統負載可用的CPU的實際數量。這是默認值和推薦設置。

1 - 禁止並行計劃生成。該操作將被串行執行。

2-64 - 將處理器數限制爲指定值。取決於當前的工作量,可以使用更少的處理器。如果指定的值大於可用CPU的數量,則使用可用CPU的實際數量。

我不知道的MAXDOP的最佳用法是什麼,但我會採取一種猜測,並說,如果你有與它8個分區的表,你會想指定MAXDOP(8)由於I/O限制,但我可能是錯的。

這裏有幾個快速鏈接我發現了大約MAXDOP

Books Online: Degree of Parallelism

General guidelines to use to configure the MAXDOP option

3

有與異常輸入SQL服務器一對夫婦parallization錯誤。 OPTION(MAXDOP 1)將避開它們。

編輯:老。我的測試主要是在SQL 2005上完成的。大部分這些似乎都不存在了,但每隔一段時間我們就會質疑SQL 2014做些什麼愚蠢的假設,我們回到舊的方式並且工作。我們從來沒有設法證明它不僅僅是最近一些案例中的錯誤計劃,儘管由於可以依靠SQL服務器在新版本中使用舊的方式。由於所有情況都是IO綁定查詢,所以MAXDOP 1不會受到傷害。

+1

請您詳細說明這些錯誤嗎? – 2010-06-28 13:02:33

+2

我無法完全限定錯誤,但特別是:當預期左連接匹配的行數很少時,會嘗試對錶和循環連接進行後臺處理,而不是對並行化進行書籤查找。 – Joshua 2010-06-28 16:50:36

0

添加我的兩分錢的基礎上,我觀察到的性能問題。

如果簡單查詢得到不必要的並行處理,它會帶來更多的問題而不是解決問題。但是,在將MAXD​​OP添加到查詢中作爲「拐點」修復之前,需要檢查一些服務器設置。

Jeremiah Peschka - Five SQL Server Settings to Change中,MAXDOP和「並行性的成本閾值」(CTFP)被提及爲重要的設置來檢查。

注:保羅·懷特提到max server memory作爲一個設置來檢查,在Performance problem after migration from SQL Server 2005 to 2012的迴應。一個好的kb的文章閱讀是Using large amounts of memory can result in an inefficient plan in SQL Server

Jonathan Kehayias - Tuning ‘cost threshold for parallelism’ from the Plan Cache幫助找出良好的價值爲CTFP

Why is cost threshold for parallelism ignored?

Aaron Bertrand - Six reasons you should be nervous about parallelism具有的一些場景,其中MAXDOP是解決方案的討論。

並行性抑制組分在Paul White - Forcing a Parallel Query Execution Plan

相關問題