2010-09-03 50 views
0

簡短的版本是我正在尋找一種方法來優先考慮SSIS 2005控制流中的某些任務。也就是說,我希望能夠進行設置,以便在任務A啓動之前任務B不啓動,但任務B不需要等待任務A完成。目標是減少空閒線程等待任務A完成的時間,以便他們可以移動到任務C,D & E.SSIS 2005控制流優先

我正在處理的問題是將數據倉庫從調用一堆SP的線性作業加載到調用相同SP的SSIS包,但並行運行多個線程。所以基本上我有一堆執行SQL任務和序列容器對象與先決條件映射出的依賴關係。到目前爲止沒有問題,事情運作良好,它減少了我們的加載時間一堆。

但是我注意到沒有下游依賴關係的任務通常在確實具有依賴關係的任務之前進行排序。這在某些地方會導致很多閒置時間,我希望儘量減少。

例如:我有大約60個過程涉及此負載,其中約10個根本沒有依賴關係,並且可以隨時運行。然後我有另一個沒有上游依賴關係,但工作中幾乎所有其他任務都依賴於它。我希望確保具有依賴關係的任務在我執行任何沒有依賴關係的任務之前運行。這只是一個例子,其他地方也有類似的情況。

任何想法?

回答

0

我不知道任何優雅的方式來做到這一點,但我的第一個鏡頭是這樣的..

序列容器與具有先運行PROC。在同一個序列容器中,在10個獨立步驟中的每一個都可以運行之前,將一個腳本任務等待5-10秒左右。然後將該序列容器下方的其餘特效鏈接起來。

1

我遲遲沒有在這裏更新,但我也在MSDN論壇上提出了這個問題,並且我們能夠設計出部分解決方案。請參閱here爲完整的線程,或here爲功能請求要求微軟給我們一個方法來乾淨地做到這一點...

簡短的版本是,您使用一系列的布爾變量來控制作爲像路障並阻止流量到達較低優先級的任務,直到較高優先級的項目開始。

涉及的步驟有:

  • 聲明一個布爾變量的每一個高優先級的任務和默認值設置爲false。
  • 爲每個高優先級任務創建一個預執行事件。
  • 在預執行事件中,創建一個腳本任務,將適當的bool設置爲true。
  • 在每個阻塞點爲每個循環插入一個循環,當適當的布爾值爲假時將循環。 (我有每個迴路中1秒的睡眠腳本,但它也可以用空循環。)

如果正確完成這給你一個工具,其中在每一節流點的包裝具有高優先級任務的一些數準備好運行,並阻止循環繼續執行優先級較低的分支,直到高優先級項目運行。一旦所有高優先級任務都已啓動,循環清除並允許任何剩餘的線程轉移到較低優先級的任務。最糟糕的情況是,一個線程在循環中等待其他線程前進並選擇高優先級任務。

這種方法的一個主要缺點是,如果你有太多的阻塞環同時排隊,或者誤讀你的依賴關係並且有循環等待從未開始的任務,那麼會導致程序包死鎖。需要仔細分析以確定哪些項目應該具有更高的優先級以及插入塊的位置。