2012-02-26 70 views
1

我已經在Oracle集中的書,他們提到,你可以這樣做ALTER TABLE Order PARALLEL 3;瞭解並行我的問題是:並行查詢處理在一個特定的存儲過程

如果我不得不根據數據檢索查詢搜索,我想添加一些並行性,我怎麼會在Microsoft SQL Server?例如:

ALTER PROC MY_SP 
@SOMEPARAMETER NVARCHAR(2000) 
AS 

    SELECT DESCRIPTION 
    FROM ORDERS 
    WHERE DESCRIPTION LIKE '%' + @SOMEPARAMETERHERE +'%' 

我該如何實現此查詢的並行性?

NOTE:如果語法錯誤,請原諒,它只是我想達到的一個例子。

+1

我想你想閱讀有關[MAXDOP](http://blog.sqlauthority.com/2010/03/15/sql-server-maxdop-settings-to-limit-query-to-run-on-特定CPU /) – 2012-02-26 05:27:05

+1

你應該相信優化 - 如果想使用並行,這將(無可否認,它在使用並行查詢是相當糟糕,但它已經變得越來越好) – 2012-02-26 06:36:53

回答

2

SQL Server的並行由兩個值來確定,該最大並行度(MAXDOP)和並行的成本閾值。 MAXDOP可以在服務器級別設置爲默認值,您可以使用查詢提示。將MAXD​​OP設置爲0意味着如果查詢通過並行度成本閾值,SQL Server優化器將考慮儘可能多地使用並行進程。如果將MAXD​​OP設置爲1,則它或多或少地消除了選項中的並行性。任何其他數字都可以作爲限制,所以如果你有,例如4個處理器,但是你將MAXD​​OP設置爲2,那麼對於任何給定的查詢(只有兩個不一定相同),將只使用兩個。

真正的踢球者是並行的成本閾值。默認值是5,這太坦率了。並行執行查詢是一項非常昂貴的操作,它將線程拆分,處理所有內容,將線程收集在一起,因此您只需要在昂貴的查詢上運行這些線程。對於OLTP系統,我建議將此值提高到40並從此處進行測試。對於一個報告系統,我也建議將這個值提高到25並從這個點進行測試。

您的查詢,沒有連接和一個簡單的,儘管非sargeable,WHERE子句,很可能將有一個非常低的估計成本。這是不可能的,它會超過1,但如果你只是想並行進行實驗,看看在執行計劃的查詢,以確定它是否成本大於1.如果是,降低您的成本閾值下降到1爲查詢提供MAXDOP提示。你應該看到並行執行。但要觀察它的運行速度以及它使用的資源的數量,並將其與非並行執行進行比較。你想確保它會以積極的方式爲你工作。

相關問題