Sql-Server

SSIS 推拉性能

  • March 7, 2016

看完哪一個更高效:從連結伺服器中選擇還是插入連結伺服器?我想知道這是否也適用於 SSIS?

例如,我有 2 個 SQL Server(A 和 B)和 SSIS 解決方案,它們從 A 中提取數據並將其載入到 B(A->B)。在伺服器 A 或 B 上部署 SSIS 包之間的性能差異是什麼?

SSIS 將在 SQL Server 的地址空間之外執行。SSIS 中的數據流轉換通過對數據的記憶體轉換獲得其性能。你可以給它更多的記憶體,你可以獲得更好的理論性能。

伺服器之間的所有事情都是平等的,如果沒有參考站點存在明顯差異,我會感到驚訝

即使在規格相同的伺服器之間,事情也很少相同

如果 A 有 32GB 的 RAM 和大小為 24GB 的 SQL Server,則為作業系統和任何其他應用程序(如 SSIS)留下 8 個 gig 的空間來執行。如果 B 的分配相似,事情可能仍然不完全相同 - 人們定期將 RDP 轉換成另一個?他們是否會復製文件(#3 檢查任務管理器) 很多類似這樣的小事情會扭曲留給作業系統的記憶體量。故事的寓意是,在可能擁有最多可用 RAM 的盒子上執行它。

除非您分析您的 SSIS 包並確定您受 CPU 限制,在這種情況下,您需要查看哪個伺服器的 CPU 密集度較低,這可能因 ETL 計劃而異。我有大型伺服器,在“工作時間”基本上是空閒的。當 ETL 啟動時,CPU 會在幾個小時內達到 100%。

數據流任務中有一個目標,即 SQL Server 目標。它在包在目標伺服器 B 上執行時才有效。當 SSIS 是全新的時,每個人都想使用它,因為它正在快速尖叫獵豹車輪。在幕後,他們將這個很棒的記憶體空間映射到 SQL Server 中——有點像分區切換。數據在 SSIS 空間和poof它現在在 SQL Server 的空間中。專為真正快速的目的地而設計。除了它脆弱得要命。它不僅有上述限制(你現在明白了,因為整個記憶體映射練習跨伺服器不是一個選項),而且你會經常遇到基本上說“哎呀,這不起作用,再試一次”的錯誤重新啟動具有所有相同數據的包,現在可以很好地保存。沒有程式碼更改,沒有數據更改,什麼都沒有。隨機失敗或成功取決於您如何看待情況。故事的道德,使用 OLE DB 目標 - 性能與 SQL Server 目標一樣好,但沒有包袱。

如果 A 或 B 具有不同的磁碟配置和/或性能簽名,則在 A 上旋轉 Rust 而 B 具有比 SSD 記憶體更好的東西,可以在具有更好資源的那個上進行處理,特別是如果您正在提取 LOB 類型或查看“緩衝假離線”性能計數器不為零,那麼您的記憶體 ETL 現在是基於磁碟的文件處理,您會感到痛苦。

引用自:https://dba.stackexchange.com/questions/131434