2011-02-08 56 views
0

我們目前有一家供應商擁有一個定製的ETL軟件包(它是大型程序的一部分),似乎需要很長時間才能完成。優化第三方ETL程序的SQL插入

我們當前的設置正在運行SQL Server 2008 R2標準版。涉及兩臺服務器,即SQL Server和另一臺稱爲批處理服務器的服務器。本質上,Batch服務器會根據表的一組行對SQL Server發出請求,並將這些行存儲在批處理服務器的內存中,並在此處進行幾次轉換。數據轉換/清理後,需要將其加載回數據庫服務器上的多個不同表中。這是通過一系列包裝在SP_PREPARE中的​​插入語句來完成的。然後繼續爲需要插入的每行(數千萬次)運行一次sp_execute語句。

自從我使用IBM Datastage以來已經有一段時間了,但我似乎記得它試圖在默認情況下執行這些插入操作,因此速度非常慢。

我已經提到讓他們導出一個帶有修改數據的數據文件,並允許我們批量導入這個文件,但是將數據導出到文件應該會對其代碼進行重大更改,而且可能不是一種選擇。

任何意見或想法將不勝感激!

Andrew

+4

如果您目前的供應商的整個過程是圍繞着可能是執行此操作的最有效的方式設計的,它可能是時間去尋找其他供應商... – JNK 2011-02-08 16:42:21

+0

相信我,我已經提出,不止一次!謝謝你確認我的恐懼! :-) – crosan 2011-02-08 16:52:34

回答

0

Echo JNK的評論上面。如果不更改代碼,你可以做的事情不多,但你可以做的一件事是在插入之前將索引放到目標上,然後重新構建它們。在每行之後重建索引可能會大大減緩進程速度。

0

如果他們使用的是OLEDB目標控制,有一些影響插入速度的幾件事情:

  1. 它設置爲快速加載和推動任何 副本(通過錯誤輸出)到 溢出表即可以使用常規表 加載重新插入 。正常的速度負載至少是 2個數量級的速度,這比 的快速負載要慢。
  2. 將 設置爲 控件的DefaultBufferMaxRows更高,批量插入更多 項目。但是,即使批量複製,也會將整批批次強制到錯誤輸出。