2015-11-05 47 views
1

我有一個SSIS包,我正在寫。在foreach循環中有一堆任務。它有一項任務必須先執行,但其餘任務可以按任意順序執行。SSIS中的流量控制有多強制?

比方說,我有「任務1」,這是必須在foreach循環內首先執行的1,然後其他任何事情都可以在任何時候執行。

比方說,括號()代表容器, - >代表優先約束。

這是正在完成,將導致整個包的有效控制流,同時完成TASK1第一?:

foreach(task1 -> SequenceContainer(task2 task3 task4)) 

或我將不得不指定

foreach ( task2 <- task1 -> task3 
         | 
         v 
         task4    ) 

此外,如果這DOES能夠工作嗎?我有這樣的習慣:繼續進行下一次失敗的迭代,是否會在模塊失敗時立即跳到下一次迭代,或者在進入下一次迭代之前嘗試完成所有事情?

回答

2

根據我的經驗,只要任務不依賴於以前的任務完成,SSIS就可以正常工作而無需流量控制。它允許系統同時工作,這可以更快。

需要注意的問題是系統併發工作。如果您的任務觸及相同的表格,則可能會導致死鎖,事務等待或意外結果。

+0

非常感謝你。他們實際上訪問相同的表格,但僅限於插入。這很重要嗎? – Aserian

+0

@Aserian如果您只是在執行插入操作,並且表中沒有任何複雜的事情發生,那麼您不應該遇到任何死鎖問題,但是多個併發插入操作可能會彼此阻塞,因爲索引需要更新以及表格。換句話說,它可能工作得很好,但是你可能看不到很多性能提升。除非我看到真正的改進,否則我可能會保持流量控制,因爲這樣就消除了必須考慮的問題。 –

+0

謝謝!如果我決定忽略優先流程約束,並且單個程序包失敗,那麼這個foreach是否認爲它失敗了,而沒有完成其餘的任務?或者完成剩下的任務然後失敗?我想離開流量控制的原因是因爲我希望這個foreach能夠完成每一個包,不管是否失敗。還是有更簡單的方法來做到這一點? – Aserian

1

在其所有子任務都報告完成之前,序列容器不會報告完成。如果你的子任務是真正獨立的,那麼同時運行它們是一個非常好的主意。