IMPORT 會逐筆驗證所有約束條件、觸發器、寫入交易日誌,且預設逐列提交,導致大量資料匯入時效能遠遜於 LOAD。但在無法使用 LOAD 的場景(如需觸發器觸發、跨平台文字檔匯入、應用邏輯耦合)下,可透過以下兩種方式大幅優化 IMPORT 效能。
對 db2uimpm 套件重新綁定並指定 INSERT BUF 選項,使匯入過程在客戶端緩衝多筆資料後再批次送至伺服器,減少網路往返。
db2 connect to sample
db2 bind db2uimpm.bnd insert buf
db2 "import from myfile of del insert into mytable"
db2uimpm.bnd 是 IMPORT 實用程式使用的套件。INSERT BUF 讓 JDBC/CLI 驅動程式啟用客戶端插入緩衝,累積多筆 INSERT 後一次發送。在 IMPORT 命令的 MODIFIED BY 子句中指定 COMPOUND=n,將 n 筆資料列打包成一個複合 SQL 陳述式執行。
db2 connect to sample
db2 "import from myfile of del modified by compound=100 insert into mytable"
COMPOUND 範圍:1 ~ 100(預設 1,即逐筆執行)。INSERT 陳述式,網路封包數減少 99%。# 1. 啟用緩衝插入(僅需執行一次,永久生效)
db2 bind db2uimpm.bnd insert buf
# 2. 匯入時指定 COMPOUND=100
db2 "import from large_data.del of del modified by compound=100 insert into target_table"
COMPOUND 僅適用於 INSERT 模式,不支援 INSERT_UPDATE、REPLACE 等模式。COMPOUND 區塊會回滾,錯誤定位較困難;建議先用小資料集驗證資料品質。INSERT BUF 為套件層級設定,影響所有使用該套件的 IMPORT 操作;若需停用可重新綁定移除選項。LOAD 或 INGEST(DB2 10.1+)工具。| 場景 | 預設 IMPORT | + INSERT BUF | + COMPOUND=100 | 兩者結合 |
|---|---|---|---|---|
| 10 萬列匯入耗時 | 基準 100% | 約 70% | 約 40% | 約 25% |
| 網路封包數 | 基準 | 減少 ~30% | 減少 ~99% | 減少 ~99% |
實際效能增益取決於網路延遲、伺服器 CPU、索引/約束複雜度等因素。