2011-05-19 93 views
1

我是SSIS的新手,嘗試使用其並行功能從數據庫導入數據。SSIS並行 - Microsoft HPC羣集?

我的工作就是這麼做:儘可能快地將一個多TB數據庫導入一組平面文件。在我手上

我有一個Microsoft Server 2008的高性能計算集羣(3個節點):

我想這一點。我正在考慮編寫HPC SOA作業,以便所有三個計算節點都可以獨立連接到SQL Server,並且可以並行導入一部分數據。當然,這與SSIS沒有任何關係,並且是一個獨立的工具。

然後我遇到了SSIS及其並行導入功能。我的SSIS服務器不是很高端 - 只有4GB的機器。我有點傾向於使用SSIS,因爲這是進行數據導入的理想方式 - 我不必重寫很多東西,並且可能使用現有轉換等。

什麼是使用自定義任務的最佳方式(或可用​​的)並行進行此導入?

回答

1

Gitmo,我可能會誤解你的問題,但會給它一個鏡頭。您需要將數據從SQL Server實例移動到多個文件,是否正確?您想要利用SSIS提供的並行數據移動功能。這意味着多個同時運行的數據流任務(DFT)。對於每個目標文件,由於併發寫入的問題,只能有一個DFT。

要獲得多個同時運行的數據流任務,其中您的源是SQL Server數據庫並且目標是一組文件,則可以嘗試以下方法(請注意,您可以獲得的並行化的上限SSIS基於許多因素,包括CPU核心數量,是否在BIDS/Visual Studio中運行以及包中的各種設置,服務器,SQL Server實例以及其他許多因素):

  1. 多同時DFT解決方案:帶有一個連接管理器的單個SSIS包指向源SQL Server數據庫,並且許多連接管理器都指向單獨的目標文件以及一個DFT f或每個目標文件。 DFT全部彼此斷開(沒有優先約束或綠色/紅色/藍色線/箭頭)。如果有需要運行並行化這些DFT的好方法的ETL步驟之前或之後的步驟是將它們全部放入通過優先約束/箭頭連接到先前和之後任務的序列容器中。這些斷開的DFT在他們自己的序列容器中將嘗試同時運行。
  2. 多同時DTEXEC解決方案:多個SSIS包,每個包都有自己的目標文件特定的DFT。您可以通過單獨的CMD窗口或通過GUI手動運行單獨的DTEXEC進程。下面的#3是該解決方案的變體,可能是更好的解決方案。
  3. 運行多個子包的父母包解決方案:將上面#2開發的每個目標文件包包裝在一個父母母包中。在Parent包中有多個同時運行的執行包任務。這些執行包任務再次與其他任務斷開連接。這樣做的一個好方法是將多個執行包任務放入其自己的序列容器中。和以前一樣,如果執行包任務斷開連接(沒有優先約束/箭頭),它們都將嘗試同時運行。

看看從Microsoft SQLCAT隊這個優秀的文章對一些更多的想法/見解:Top 10 SQL Server Integration Services Best Practices

有可用這些相同的想法和其他可能的解決方案,內部和SSIS以外可能變化。祝你好運!

+0

斯蒂芬嗨,你的答案謝謝。這種並行性總是受到SSIS服務器硬件的限制,對吧?我有一個Microsoft HPC羣集供我使用。如果我可以編寫某種分佈式應用程序,它將使集羣中的計算節點創建獨立的SQL連接並導入數據分區,那麼速度不會更快嗎?有任何想法嗎?我能以某種方式使用自定義任務來獲取羣集中的計算節點來執行此操作嗎?這些是我心中浮現的一些想法,我想要有人來驗證。感謝您的回答! – Gitmo 2011-05-20 06:27:54

+0

好吧,讓我補充一點。我可以以某種方式執行遠程SSIS包調用嗎?如果以某種方式我們可以以編程方式創建ssis包,我可以在多節點上產生它們並且並行地導入數據。有任何想法嗎? – Gitmo 2011-05-23 08:29:42