| 工具 | 本質 | 優勢 | 適用場景 |
|---|---|---|---|
| IMPORT | SQL INSERT 前端 | 功能豐富,支援重試、記錄跳過 | 中小量異構遷移 |
| LOAD | 直接格式化頁,跳過大部分行級處理 | 無日誌(可選)、並行度高、V8 新增 FROM CURSOR/CLI 接口 | 大批量初始化、數倉載入 |
實測:LOAD 比優化過的陣列 INSERT 快 2 倍,比未優化快 10 倍;FROM CURSOR 比 INSERT...SELECT 快 ~20%。
-- 錯誤:每行獨立編譯
INSERT INTO t VALUES (1, 'a');
INSERT INTO t VALUES (2, 'b');
-- 正確:預處理一次,重複執行
INSERT INTO t VALUES (?, ?);
靜態 SQL 用主機變數同理。可提升 數倍速度。
INSERT INTO t VALUES (1,'a'),(2,'b'),(3,'c')SQL_ATTR_PARAMSET_SIZE=100,SQLExecute 一次插 100 行 → 耗時縮減 2.5 倍PreparedStatement.addBatch() + executeBatch()BEGIN ATOMIC ... END 或 CLI SQL_ATTR_CHAINING| 模式 | 機制 | 優化建議 |
|---|---|---|
| 預設 (FSCR) | 掃描自由空間控制記錄 | 設 DB2MAXFSCRSEARCH 限制搜尋頁數(預設 5) |
| APPEND | 直接尾部追加,零搜尋 | 批量載入最快,ALTER TABLE ... APPEND ON |
| 叢集索引 | 按鍵值就近插入 | 插入慢但查詢快;載入前 DROP 索引,載入後重建最優 |
db2empfa 啟用區段預分配(建議 32 頁/區段)CHNGPGS_THRESH=5(預設 60),啟用 DB2_USE_ALTERNATE_PAGE_CLEANING=ON (V8 FP4+),NUM_IOCLEANERS >= 物理設備數ALTER TABLE LOCKSIZE TABLE、LOCK TABLE IN EXCLUSIVE MODE、調小 LOCKLIST/MAXLOCKS 觸發升級 → 耗時減 3%UR 隔離級可讀LOCKLIST/MAXLOCKS、應用端用 UR、DB2_EVALUNCOMMITTED=YES (FP4+)、高頻提交MINCOMMIT=1 保持預設,批量載入場景不宜調大| 場景 | 推薦策略 |
|---|---|
| 應用程式日常單行/小批量 | 參數標記 + 陣列/批次 API + 1000 行一提交 |
| 大批量初始載入(百萬級+) | LOAD FROM CURSOR / CLI LOAD + 表鎖 + 積極頁清除 |
| 叢集索引表大量載入 | 載入前 DROP 索引,載入後 REBUILD |
| 跨資料庫遷移 | LOAD 到暫存表 → INSERT...SELECT(服務端搬運) |
掌握全鏈路優化點,才能在 DB2 上跑出 INSERT 極致效能。