標籤:oracle 資料匯入 並行 提高
近期有一個行業項目,需要把較大資料從檔案中匯入到oracle。
我們使用oracle的sqlldr匯入資料,當資料量較大時匯入的時間過長:匯入一張8千萬條記錄的表需要2.5個小時,太慢了。
後來採用了sqlldr並行匯入的方式將時間縮短到了0.8小時,這裡記錄一下使用過程。
思路
將要匯入的資料檔案拆分成10份,然後使用多任務並存執行對應資料份數的sqlldr命令(當然也就需要同樣數量的control檔案),多個用戶端同時往資料庫中匯入資料。
這裡有兩點比較重要,1、如何自動產生若干條sqlldr命令和若干個control檔案(一個個寫有點累);2、如何同時並存執行(一個個去執行就更累了)。
這裡藉助了集算器這個工具完成自動產生命令和控制檔案,再並存執行。
實現步驟主程式
負責任務控制,任務分配、調用子程式。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/45/C5/wKioL1PrA_ni7olrAAEtq8yTtOs482.jpg" style="float:none;" title="2014-08-13_141422.jpg" alt="wKioL1PrA_ni7olrAAEtq8yTtOs482.jpg" />
子程式
產生具體control檔案和sqlldr命令,並執行匯入命令完成資料載入
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/45/C3/wKiom1PrAuKgPbctAAGgb9EpE2Y398.jpg" title="2014-08-13_141433.jpg" style="float:none;" alt="wKiom1PrAuKgPbctAAGgb9EpE2Y398.jpg" />
【注】這裡使用了集算器的並行機制來同時執行多個sqlldr命令;使用system函數調用系統命令。
實際效果
由於是程式控制的並行任務,所以可以根據實際需要設定並行任務數,將機器效能發揮到最優。
記錄了不同並行數情況下sqlldr匯入速度,總體是呈線性增長的,並發任務越多,匯入速度越快。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/45/C5/wKioL1PrA_vg5lZIAACehW8v0Y8881.jpg" title="2014-08-13_141443.jpg" style="float:none;" alt="wKioL1PrA_vg5lZIAACehW8v0Y8881.jpg" />