從 DB2 提取到 SQL Server - 兩台伺服器之間的數據在哪裡?
我試圖了解當我從 SSIS 包中從 DB2 中提取數據並將其載入到 SQL Server 時會發生什麼。
我的問題是:DB2 和 SQL Server 之間的數據在哪裡?在我的個人電腦上?我的意思是數據是否“通過”我個人筆記型電腦上的記憶體,然後發送到 SQL Server?
這取決於SSIS 包在哪裡執行,但是執行它的機器或伺服器是 DB2 伺服器和 SQL 伺服器之間的通道。因此,數據被載入到執行SSIS 包的機器的記憶體中,如果您使用某些數據轉換和變數,它們也會消耗SSIS伺服器上的額外記憶體。
本文更深入一些,並提供了有關SSIS記憶體消耗的良好資訊。
設計良好的包永遠不會將數據寫入磁碟,並且數據將完全保留在源和目標之間的記憶體中。
正如 JD 所指出的,這場博弈中有三個參與者:源、目的地和協調數據移動的機器。您可以在 Windows Server 上執行 DB2 LUW,並在同一個盒子 Box1 上託管 SQL Server,但是如果您讓執行伺服器執行 Box2,數據將從 Box1 流式傳輸到 Box2,然後再流回 Box1。數據包當然很享受旅程,但如果它永遠不會離開,處理速度會更快。
根據您的情況,在源或目標伺服器上執行 SSIS 包並消除額外的網路躍點可能是個好主意,但這可能會破壞其他事情。
不僅應該關注總伺服器記憶體,而且還可以溢出到磁碟。這是 SSIS 可能發生的“最嚴重”的罪過,因為你的表演要上廁所了。SSIS 是一個記憶體中的提取、轉換和載入引擎,如果它不能將數據保存在記憶體中,它會分頁到磁碟,所以現在你付費了
- 磁碟訪問以從源獲取數據,
- 寫入然後在任何處理它的地方讀取它(寫下多餘的,但最終,是時候使用它了,所以我們必須將它讀回管道)
- 付費將其寫入目的地的磁碟。
哎呀小鎮,你的聚會。Tim 的文章指出了對記憶體的需求,您可能在包中使用的模式會影響可用記憶體,如果他沒有提到,數據類型(最大類型、CLOB/BLOB)也會導致這些磁碟溢出。