2010-09-30 50 views
6

我有一個包含許多SELECT命令的存儲過程。是否可以將MAXD​​OP設置爲存儲過程?

而不是把OPTION (MAXDOP 8)放在每個select命令的末尾,有沒有一種方法可以在存儲過程開始時將其設置並在結束時將其刪除,而無需在服務器上實際設置它?

ex。

sp_configure 'max degree of parallelism', 4 
go 
reconfigure with override 
+1

爲什麼'MAXDOP 8?'你有並行的'最大程度1'在服務器級別?存儲過程有什麼問題,您覺得需要添加查詢選項? – LittleBobbyTables 2010-09-30 20:10:03

+0

您嘗試使用此設置更正哪個問題?我懷疑如果你可以發佈更多的細節(包括代碼),可能會有更好的方法。任何提示的 – 2010-09-30 20:13:21

回答

4

不幸的是,沒有。

您可以使用 sp_configure 'max degree of parallelism'將您的選項設置爲在服務器級別,或更新存儲過程中的每個SELECT語句以使用OPTION (MAXDOP 8)

也就是說,查詢選項應該是最後的手段,如果您的查詢表現不佳,可能存在潛在的問題。

2

幸運沒有。做這種事情的推薦方法是根本不做。當SQL Server真正選擇壞計劃而不是規則時,覆蓋查詢應該只是罕見的異常。而當一個查詢計劃已被強制執行,正確的動作是使用查詢計劃指南:

需要理解的最重要的事情是查詢提示是設計(他們需要代碼變化修改查詢)和濫用權力大大減少了應用程序(當硬件更改,或者在不同的部署地點的未來可維護性時間選項,提示會錯誤)。相比之下,查詢計劃指南是部署時間選項,根據現場硬件容量和工作負載,它們不需要更改代碼,並且可以在每個部署的站點上自定義。

+0

用法很少推薦,但我們仍然有它們可用於某種原因,你可能要考慮爲什麼;)......很抱歉,但這個答案是沒有幫助的。 – 2017-11-16 12:46:37

11

我希望有一種方法可以爲proc的範圍設置MAXDOP,但我同意沒有辦法做到這一點。

爲了反擊上面的一些建議,使用MAXDOP提示有很大的理由,例如在多處理器環境下進行工時之後的索引構建,更新或數據構建,但是MAXDOP設置爲低於處理器數量以幫助平衡忙碌的「高峯」時段的活動,例如正常營業時間。與一些提示(如索引提示)不同,這不會強制您的進程使用更多的線程,但是如果計劃如此選擇,它將使其能夠執行此操作。

一些索引構建將執行接近兩倍的速度,如果你雙倍的線程,所以是一個真正的好處。

+0

[加1]用於識別特定邊緣情況此選項是有利的。 – l46kok 2015-03-04 06:58:38

相關問題