2012-10-31 50 views
2

,我有以下形狀的查詢:如何使2個查詢使用2個CPU

A 
UNION ALL 
B 
UNION ALL 
C 
UNION ALL 
D 

,並想通過調用A,B,C和d並聯並行,然後,工會它們。淨。這4個查詢全部讀取相同的表中的數據。

我嘗試的第一步是在SSMS的一個Tab中執行A並在第二個Tab中執行B. A和B各持續大約1分鐘,所以我有時間啓動A,然後轉到B標籤並啓動它。

但是,當我看CPU的使用率,它停滯在13%(我在一個8核CPU @ Windows),這對應於一個核心的100%。

我的問題: - 「鎖定」機制是否允許在給定的一組表上的兩個查詢並行運行? - 如果並行性是可能的,我會注意到它試圖在兩個SSMS選項卡中並行運行A和B,還是我的測試有缺陷? - 最終如何提高UNION ALL系列的性能?

+0

SQL Server在資源可用時優化查詢以實現最大平行化。什麼是您的'一個聯盟所有b'查詢的實際執行計劃?您是否擁有獲得多處理器許可的SQL Server安裝?你指定'SSMS2008',是否意味着'SQL Server 2008'被安裝? – MatBailie

回答

3

你根本不強制並行。該引擎決定基於查詢它的成本

how to run a parallel query on sql server 2008?

在這種情況下,你可以打開4個連接到數據庫,並運行4個querys,結果追加。您將使用.net並行處理來加入結果集。

但是,UNION在數據庫中幾乎總是更高效和更簡單。

從同一個表池中讀取並不會促進或防止並行性:共享鎖的發佈不會阻止其他讀者。數據將被緩存,所以使用更少的IO。

如果每個UNION子句花費的時間太長,那麼你有其他問題,如貧窮指標,舊的/沒有統計,RAM太小,嚴重的結構化查詢,tempdb的問題......和許多其他的可能性

TL ; dr

修復查詢。不要在他們周圍工作。

+0

+1 - 僅供最終評論:)只有一個問題......'tl; dr'? – MatBailie

+0

@Dems:http://en.wikipedia.org/wiki/Wikipedia:Too_long;_didn't_read – gbn

+1

Stuudeous ..... –