當談及 DB2 Symmetric Multiprocessing (SMP) 時,多數人聚焦於查詢並行 (Intra-partition Parallelism)。實則,並行索引構建與並行索引維護同樣關鍵,尤其在數據倉庫裝載、批量載入、災難恢復重建索引等場景,能將耗時壓縮 50%-67%,顯著縮短維護窗口。

圖 1:啟用並行度後索引構建時間隨 CPU 核心數近線性下降 (實測環境:8-core Power7, 5 億行表)
CREATE INDEX ...CRTLF| 維護模式 | 行為描述 | 事務影響 |
|---|---|---|
| 串行 (默認) | 逐個索引應用 INSERT/UPDATE/DELETE 變更 | 事務持續時間 = Σ(單索引維護時間) |
| 並行 | 多個索引同時接收並應用變更 | 事務持續時間 ≈ MAX(單索引維護時間) |

圖 2:多索引表批量裝載場景,並行維護將總耗時縮減至串行的 1/2~1/3
CHGSYSVAL SYSVAL(QQRYDEGREE) VALUE('*MAX') // 使用所有可用 CPU/內存
CHGSYSVAL SYSVAL(QQRYDEGREE) VALUE('*OPTIMIZE') // 「好鄰居」模式,動態平衡資源
CHGSYSVAL SYSVAL(QQRYDEGREE) VALUE('*NBRTASKS 4') // 限制最大 4 線程 (需 PTF 支持)
影響範圍:全系統所有查詢、索引構建、索引維護、統計收集。
// 當前作業強制最大並行度,忽略系統值
CHGQRYA DEGREE(*MAX)
// 恢復繼承系統值
CHGQRYA DEGREE(*NONE)
適用於:夜間批量窗口臨時提升並行度、特定高優先級維護作業。
// 創建庫級 QAQQINI (一次性)
CRTDUPOBJ OBJ(QAQQINI) FROMLIB(QSYS) OBJTYPE(*FILE) TOLIB(MYLIB) NEWOBJ(QAQQINI)
// 動態調整並行度 (無需重連)
UPDATE MYLIB.QAQQINI SET QQVAL = '*OPTIMIZE' WHERE QQPAM = 'PARALLEL_DEGREE';
// 應用到當前會話
CHGQRYA QRYOPTLIB(MYLIB)
優勢:極細粒度控制,支持應用程序無侵入式調優,配置即時生效。
當裝載行數超過現有表行數 20% 時:
DROP INDEX 所有非主鍵/非唯一約束索引LOAD 命令 (非 SQL INSERT) + 並行度 *MAXCREATE INDEX 並行重建 (自動啟用並行構建)RUNSTATS 全表採樣此策略可將總裝載時間縮減 40%-60%,並避免維護過程中的日誌膨脹與鎖升級。
WRKSYSACT 監控 CPU 就緒隊列 < 10%表大小 * 1.5 * 並行度 空間DB2 for iSeries 並行索引技術是 SMP 特許功能的「隱形王牌」。通過 QQRYDEGREE 系統值或 QAQQINI 靈活控制,DBA 可在不修改應用代碼的前提下,針對索引密集型工作負載 (數據倉庫裝載、批量更新、索引重組) 實現顯著性能提升。建議將並行索引能力納入常規容量規劃與維護窗口優化體系。