我在寫一個Java程序,它創建一個符合特定分佈參數的6,800,000條記錄的CSV文件,並使用Oracle的SQL * Loader填充一個表。如何調整Oracle的SQL * Loader追加?
我正在測試我的程序使用不同大小的記錄(50,000和500.000)。生成CSV文件本身非常快速,使用併發性需要幾毫秒的時間來創建並將這些記錄插入到文件中。
另一方面,插入所述記錄花費的時間太長。讀取由SQL * Loader生成的日誌文件時,需要00:00:32.90秒來填充表中的50,000條記錄和00:07:58.83分鐘以使用500,000填充它。
SQL * Loader基準我搜索了一下,表現出好得多的性能,比如不到2分鐘就有200萬行。我按照this tutorial來改善時間,但幾乎沒有改變。這裏顯然有些問題,但我不知道是什麼。
這是我的控制文件:
OPTIONS (SILENT=ALL, DIRECT=TRUE, ERRORS=50, COLUMNARRAYROWS=50000, STREAMSIZE=500000)
UNRECOVERABLE LOAD DATA
APPEND
INTO TABLE MY_TABLE
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
...
另一個重要的信息:我已經使用並行= TRUE試過,但我得到了ORA-26002錯誤(表MY_TABLE已在其上定義的索引)。不幸的是,使用skip_index_maintenance運行會導致索引UNUSABLE。
我在做什麼錯?
更新
我注意到,運行的程序(不到一秒鐘)後不久,所有的行已經存在於數據庫中。但是,SQL * Loader仍然很忙,只能在32-45秒後結束。
它可以做什麼?
好一個...滴速,並重新創建索引是不是一種選擇,我會用傳統的插入嘗試.. – Tarek 2014-11-04 11:25:45
傳統路徑佔用了更多時間......我想問題在於使用的表或數據庫內,我會請DBA來看看。 – Tarek 2014-11-05 10:52:22