支柱一:Bufferpool (緩衝池) - 最直接的效能槓桿
核心指標:緩衝池命中率
Hit Ratio = (1 - (Physical Reads / Logical Reads)) × 100%
Physical Reads = buffer pool data physical reads + buffer pool index physical reads
Logical Reads = buffer pool data logical reads + buffer pool index logical reads
目標 > 95%,越接近 100% 越好。取得快照:
db2 "get snapshot for all bufferpools"
優化策略
- 調大 NPAGES / BUFFPAGE: 將
IBMDEFAULTBP 的 NPAGES 設為 -1,由 BUFFPAGE 統一控制,依資料庫大小給予合理大值 (預設極小)。
- 多緩衝池隔離: 熱點大表專屬 BP、小表共用 BP、索引與資料分離,依快照觀察各池命中率微調大小。
- 避免過大: 記憶體超配導致 OS 分頁,反而拖垮效能。最佳點在「命中率曲線趨平」處。
支柱二:SQL - 一條惡劣 SQL 可摧毀一切調優成果
DBA 面臨的三板斧 (無法改 SQL 時)
- 新增/修改索引
- 調整叢集因子
- 更新/偽造目錄統計資訊
真實成本 = 單次執行成本 × 執行頻率
- 單次成本:
db2exfmt、第三方工具、Event Monitor 取得。
- 執行頻率:需深度分析 Event Monitor 資料,耗時但關鍵。
最佳效能 = 消除高真實成本 SQL + 物理基礎建設 (記憶體、I/O、CPU) 達平衡。
支柱三:Lock (鎖) - 並發度的守門員
關鍵配置參數
| 參數 | 角色 | 建議值/策略 |
| LOCKLIST | 鎖清單總記憶體 (4KB 頁數) | 依快照 Lock list memory in use > 50% 時擴充 |
| MAXLOCKS | 單一應用程式佔用鎖清單百分比觸發升級 | 預設 10-22%,配合 MAXAPPLS 確保 MAXLOCKS×MAXAPPLS ≥ 100 |
| LOCKTIMEOUT | 等待鎖逾時秒數 | OLTP 嚴禁 -1,建議 10-15 秒,防止雪崩效應 |
監控指令
db2 "get snapshot for database on DBNAME"
-- 觀察 Lock waits, Lock wait time, Lock list memory in use
支柱四:Sortheap (排序堆) - 隱藏的效能殺手
參數關係
SORTHEAP (DB 級):單次排序最大頁數 (4KB)。私有排序佔代理私有記憶體,共享排序佔資料庫共享記憶體。
SHEAPTHRES (Instance 級):私有排序「軟上限」/ 共享排序「硬上限」。
- 建議:
SHEAPTHRES ≥ 2 × max(SORTHEAP)。
診斷腳本
db2 "update monitor switches using sort on"
-- 運行一段時間 --
db2 "get snapshot for database on DBNAME"
SortsPerTxn = Total Sorts / (Commits + Rollbacks)
%SortOverflow = Sort Overflows / Total Sorts × 100%
SortsPerTxn > 5 → 可能 SQL 缺索引導致過度排序。
%SortOverflow > 3% → 嚴重大型排序溢寫磁碟,**加大 SORTHEAP 只會掩蓋問題,真解是改 SQL/加索引**。
變更後必做
db2rebind 相關套件,優化器依新參數重選存取路徑。
總結:調優閉環
- 建立基線快照 (Bufferpool、Lock、Sort)。
- 鎖定 Top N 真實成本 SQL。
- 依序調整四大支柱參數,每步驗證快照變化。
- 重新綁定套件,回歸測試。
- 上一篇文章: DB2 與 AIX 儲存條帶化參數調優實戰:消除 I/O 熱點、極大化平行吞吐
- 下一篇文章: DB2 25 年演進史:從關聯式先鋒到混合型資料服務器,領航企業資訊議程
Copyright ©
程式碼之家 All Rights Reserved