2017-02-03 23 views
0

我有一個SSIS包,可以將數據從SQL服務器移動到Postgres 9.5數據庫。我正在使用最新的Postgres ODBC驅動程序連接到postgres服務器。大部分操作是插入和更新以及upserts。當我在Visual Studio 2012中從我的開發機器(Win 10 64位)運行此包時,它非常快速。它可以在大約40秒內傳輸約80k行。SSIS包在服務器上運行緩慢,但在開發機器上運行得很好

當我將它部署到服務器(一個SQL Server 2012實例)並使用SQL管理工作室運行時,它執行得非常緩慢。傳輸少於10行需要大約20秒,並且需要永久性地處理完整的數據集。如果完成,我永遠不會放棄,因爲它只需要很長時間。

我的開發機器和服務器都有完全相同的postgres驅動程序安裝和相同配置的ODBC源。

編輯:我還應該注意到,我已經將其他軟件包部署到該服務器上運行得很好,儘管這些軟件包不會觸摸postgres或使用ODBC進行任何操作。

+0

您是否使用本地和服務器上的相同數據庫?如果沒有,可能服務器很忙或者服務器上的表很大,但是你的開發表很小。 – FLICKER

+0

這是Postgres中的同一張表,您正在使用本地服務器和服務器上的表嗎?你能提供緩慢運行的數據流的圖像嗎? –

+0

檢查ODBC和/或驅動程序跟蹤/日誌記錄。 – TallTed

回答

0

如果一切都等於:

  • 驅動程序相同
  • 相同的結構 - ODBC(即SSL,打勾相同框),包參數
  • 相同的表 - 與相同量的在這些數據的和指標
  • 相同的位岬(64倍)

我將目光轉向資源的差異。即

  • 是IO相同。假設這是寫入相同的數據庫(和文件),那麼這不應該是一個問題。
  • 內存 - 是在開發實例上受限制的內存?如果數據流有很大的緩衝區,這可能會減慢速度。
  • CPU - 是比開發機器更有限的開發服務器
  • 網絡 - 開發服務器位於具有不同QoS的不同子網中。我想這不是問題,因爲其他軟件包不受影響。除非連接到Postgres時有什麼奇怪的東西。

另一種解決問題的方法是運行不同版本的軟件包,剝離部分數據流。即刪除odbc/ado.net目標並運行該程序包。如果它很快結束,你就知道問題在那裏。如果它仍然很慢,繼續向上遊直到你確定組件慢。

最後,我會考慮使用psql而不是odbc。 psql是一個postgres工具,比如SQL的bcp,它可以讓你將數據批量複製到postgres。 odbc驅動程序將只允許逐行插入,這往往是緩慢的。將數據寫入製表符分隔的文件,然後使用psql將數據批量複製到postgres中實際上要快得多(80k行可能需要5s)。

相關問題