2011-06-28 18 views
0

我現在準備從SQL Server導出到第三方ERP系統的過程。它掃描數據庫方案中的幾乎所有表格,併爲每個產品創建XML。出口足夠長,客戶希望它更快。我意識到出口程序只使用1個CPU。SQL Server中的多處理器用法

所以我認爲如果我用不同的參數(不同範圍的產品)多次運行相同的程序,我可以利用所有的處理器,它可以更快。

問題

  1. 我如何能做到這一點只使用SQL Server工具。 可能的解決方案之一是使用SSIS。任何其他?

  2. 處理器數量可以變化。我可以使用sys.dm_os_sys_info來獲得處理器數量。如何從處理器數量動態啓動幾次程序?

+0

是否有其他人在同一時間使用此服務器?如果是這樣,你可能不想捆綁其他處理器。 –

+0

此導出不會在生產服務器上完成,而會在每個客戶端數據庫的本地一次且只有一次的情況下完成。但是有很多數據庫。 – Dalex

回答

0

一對夫婦的事情要牢記:

- 你確定你的CPU的約束,而不是IO約束?根據我的經驗,很難將CPU作爲進程中的瓶頸,並且更有可能限制磁盤訪問速度。你應該做額外的測試,以避免重組你的整個過程,只有2%的速度提高,因爲你的硬盤不能跟上。

- 這可能與檢查服務器端並行性設置一樣簡單。有時DBA會將其設置爲1,因爲它可以緩解不良查詢計劃的問題,但通常收益有限。

- 您可以使用OPTION (MAXDOP #)來設置查詢的最大並行度,其中#是您希望允許的並行進程的數量。

+0

1.我檢查性能計數器 - CPU總是100%,但HD每秒只寫入約30K - 這是因爲所有緩存在內存中2.是的,它具有parallelizm = 1 3. - MAXDOP僅限制內核數量,不擴大它,不是嗎? – Dalex

+0

@Dalex - 如果perf計數器表示CPU處於100%,那麼你希望獲得我的分裂成多個批次?如果你已經受CPU限制,那麼你將只有4個作業以25%的速度運行... – JNK

+0

1核心是100%,當然不是CPU – Dalex