本文濃縮 DB2 優化六大核心策略,適合快速參考與團隊分享。
NOT LOGGED INITIALLY 載入。RUNSTATS ON TABLE ... AND INDEXES ALL,否則優化器不採用索引。單節點表空間 (DIM) 僅 2 CPU/4GB。多節點 (32 節點) 並行掃描 → 協調節點匯總,效能提升數量級。配合索引更佳。
ALTER TABLE t ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
-- 大量 INSERT/LOAD
COMMIT; -- 失敗時表需重建,僅限可重建資料
避免日誌爭用,極大提升載入速度。
LOCK TABLE t IN EXCLUSIVE MODE;
鎖數量有上限且佔記憶體,大批次操作時降低鎖升級開銷。評估並發影響後使用。
許多 ETL 全表塞入臨時表導致膨脹。原則:
SELECT 僅必要欄位WHERE 過濾必要列ON 子句僅放:
主表過濾條件放 WHERE。錯誤寫法導致計劃退化或結果錯誤。
| # | 策略 | 關鍵指令/語法 | 風險提醒 |
|---|---|---|---|
| 1 | 索引+統計 | CREATE INDEX → RUNSTATS ... INDEXES ALL | 插入前建索引需大日誌 |
| 2 | 多節點分區 | CREATE TABLESPACE ... ON NODES (...) + 分區鍵 | 分區鍵需均勻分布 |
| 3 | 不計日誌載入 | ACTIVATE NOT LOGGED INITIALLY | 失敗不可回滾 |
| 4 | 表級鎖 | LOCK TABLE ... EXCLUSIVE | 並發度下降 |
| 5 | 精簡臨時表 | SELECT 必要欄位 + WHERE 過濾 | 需分析下游相依 |
| 6 | LEFT JOIN優化 | ON 僅關聯鍵+右表過濾 | 主表過濾放 WHERE |