調優哲學:有度、有據、有基線、不盲目
調優投入邊際遞減,**超過合理度的努力產生負面影響**;性能仍不達標 → 考慮遷移更快平台、架構重構。本文基於 DB2 UDB V7/V8 通用原則。
一、數據庫設計階段:調優的基因編輯期
1. 存儲架構:多快好省
- **越多越快的物理磁盤/SSD = 越高潛在性能**(並行 I/O 基石)。
- **日誌、備份、數據分盤**:日誌獨立盤(性能+可恢復),備份獨立盤(隔離故障域)。
2. 表空間設計:隔離即控制
創建**多個用戶表空間**三大收益:
- **I/O 隔離**:不同表空間放不同物理盤。
- **頁面大小差異化**:4K/8K/16K/32K 按行長/訪問模式匹配。
- **緩衝池隔離**:熱表/索引/大對象各自專屬緩衝池,防擠佔。
索引/LOB 專用表空間為標配。**DMS (數據庫管理空間) + 原始設備 > SMS (系統管理空間)** 性能。
頁面大小選擇:行長 ≤ 4K 且隨機訪問 → 4K;行長大/順序掃描多 → 16K/32K(單頁容納更多行,預讀效率高)。**注意:單頁最多 255 行,餘量浪費**。
3. 緩衝池策略:少而精
- 每表空間綁定一同頁面大小緩衝池(一池可服務多空間)。
- **內存有限,過度分池 → 互搶 → 整體性能下降**。
- **優先用最少數量池,DB2 動態管理極其優秀**;基於監控基線再微調。
4. 表設計:範式與反範式的平衡術
- **純範式(零冗余)**:空間最省、完整性最好、但**查詢需多表 JOIN、復雜度高**。
- **受控冗余**:**索引覆蓋列 + 匯總表** 形式冗余,**顯著提升讀性能**。
- **匯總表刷新頻率** = 業務對數據新鮮度容忍度的倒數。
5. 索引:性能杠桿之王
- **訪問模式驅動索引**:按 WHERE/JOIN/ORDER BY/GROUP BY 欄位建索引。
- **OLTP 不穩定表**:少索引(1-2 個),減寫入開銷。
- **歷史/數倉大表**:多索引,支撐多維分析。
- **索引列數極少化**;**INCLUDE 列**掛載非鍵列,**低成本實現 Index-Only Scan**。
- **聚簇索引**:大量範圍查詢時指定,數據物理順序跟隨索引,**預讀極致利用**。
- **索引獨立表空間 + 專屬緩衝池**,防數據頁擠佔索引頁。
二、應用程序設計:別讓代碼拖累數據庫
1. 只取所需
- **禁用
SELECT *** → 額外網絡/內存/CPU、阻礙 Index-Only Scan。
- **無序業務禁
ORDER BY**、**去重業務禁 DISTINCT** → 省排序/哈希開銷。
2. 鎖與隔離級別:併發的方向盤
- **只讀事務也要 COMMIT** → 釋放共享鎖,避免鎖升級。
- **最低有效隔離級別**:CS (Cursor Stability) 為默認平衡點;**RR 昂貴且降併發**,非必要不用。
- **只讀游標加
FOR READ ONLY** → 保證不獲取排他鎖。
- **預知更新加
FOR UPDATE** → 避免鎖升級開銷。
- **表鎖預防行鎖升級**:高衝突場景應用層先
LOCK TABLE IN EXCLUSIVE MODE。
3. 查詢優化級別:按需付費
DFT_QUERYOPT (默認 5);靜態 SQL 用 PREP/BIND 指定;動態 SQL 用 SET CURRENT QUERY OPTIMIZATION。
- **複雜報表嘗試 7/8 級**;
db2batch 測編譯/執行耗時。**靜態 SQL 編譯一次執行多次,動態 SQL 緩存復用**,邊際成本低。
三、初始調優三部曲
- Performance Wizard (配置向導):選「裝載數據」模式 → 產生裝載優化配置(如
LOGBUFSZ, LOGSECOND 調大)。
- 裝載數據 → RUNSTATS 全量統計:
RUNSTATS ON TABLE ... WITH DISTRIBUTION AND INDEXES ALL → **受影響包 REBIND**。
- Performance Wizard (運行模式):輸入負載特徵 → 產生運行優化配置,**對比新舊參數高亮確認**。
四、持續優化閉環
- **Database System Monitor** 定期採集指標。
- **問題 SQL 定位** →
EXPLAIN 解讀訪問計劃(圖形化/文本)。
- **根據計劃調整**:索引增減、參數微調、SQL 重寫。
- **基線管理**:每次變更記錄前後關鍵指標,**打破常規、敢於回滾負面變更**。
總結
DB2 調優是**設計期種下的因 + 運行期精心耕耘的果**。存儲多盤、表空間隔離、頁面大小匹配、緩衝池少而精、索引模式驅動、應用只取所需、隔離級別最低有效、優化級別按需付費、三部曲啟動、持續監控閉環——**這套組合拳,打出的是穩定、可預測、可演進的高性能數據庫**。