2017-04-17 497 views
2

一個目的地時,合併聯接問題 - 所有合併加入行SSIS - 輸入到多個目的地

One Destination - All Merge Join Rows

兩個目的地 - 更少的合併加入行

Two Destinations - Fewer Merge Join Rows

誰能請解釋這行爲對我來說?

我正在生成一個計數字段,然後通過合併連接將其返回到主流中,然後根據計數執行條件分割。它在沒有更新語句的情況下工作正常,但是當我使用條件分割中的更新語句運行它時,會得到不同的結果。也許值得一提的是,數據中沒有空值,兩張圖片都是同一個文件。任何想法都表示讚賞。謝謝。

+0

我們應該看行計數嗎?在其中一張照片中,包裹在另一張照片中完成,但仍在運行。 –

+0

是的,我不知道爲什麼包會處理2188行更少的行。在第二個映像中,軟件包被卡住了,大概是在運行,但我不明白爲什麼需要更多的處理來更新8000行。 –

+1

最後通過OLEDB命令運行至少8977個單獨的更新事務,這將需要時間。插入臨時表通常更快,然後進行基於集的更新。 –

回答

1

OLEDB command沒有完成執行當前批次的行時,先行組件(condotionnal split)將不會發送更多行直到他完成處理等等。此外,它取決於數據流DefaultBufferSizeDefaultBufferMaxRows

瞭解更多關於Data Flow Performance Features

0

我想我會更新我的教訓。看起來加載了多少行(49430與52220)的問題是由於SSIS中的DefaultMaxBuffer大小和DefaultMaxBuffer行設置引起的。這並沒有提高性能,只有多少記錄被加載到內存中。

正如Martin在上面提出的那樣,處理更新的延遲是由於效率低下造成的。對於想要知道暫存表是什麼的人,這只是您在數據庫中創建表的通用術語(或者使用sql命令任務在SSIS中創建表),然後在SSIS中使用sql命令來運行更新語句。如果需要,可以在更新後將暫存表放入SSIS任務中。我無法低估多大的性能提升,這可以讓您獲得大量更新。