DB2 內建了快照監控器、事件監控器、Explain 計劃分析等工具,但在生產環境排查「記憶體洩漏」、「代理阻塞」、「日誌寫入延遲」等疑難雜症時,往往需要更底層、更即時的記憶體視圖。db2mtrk(記憶體追蹤器)與 db2pd(問題診斷工具)正是為此而生,它們直接讀取 DB2 共享記憶體結構,無需開啟監控開關,影響極小,是 DBA 排障的「聽診器」。
db2mtrk 可報告實例級、資料庫級、代理級(Agent)記憶體池的分配情況,包含:
bph(緩衝池)、lockh(鎖列表)、appctlh(應用控制堆)等db2mtrk [-i] [-d] [-p] [-m | -w] [-r interval [count]] [-v] [-h]
| 選項 | 含義 |
|---|---|
-i | 顯示實例級記憶體 |
-d | 顯示資料庫級記憶體 |
-p | 顯示私有(代理)記憶體 |
-m | 顯示各池最大值(硬限制) |
-w | 顯示各池高水位標 |
-r interval [count] | 重複模式:每 interval 秒採樣一次,共 count 次 |
-v | 詳細輸出(含池名稱完整拼寫) |
-h | 顯示幫助 |
db2mtrk -i -d -p -v
輸出解讀(節選):
Memory for instance
monh: 320.0K other: 8.1M
Memory for database: SAMPLE
utilh: 64.0K pckcacheh: 128.0K catcacheh: 64.0K
bph (1): 1.2M bph (S32K): 704.0K bph (S16K): 448.0K bph (S8K): 320.0K
bph (S4K): 256.0K shsorth: 0 lockh: 320.0K dbh: 4.3M other: 128.0K
Memory for agent 3632
other: 64.0K apph: 64.0K appctlh: 64.0K
...
關鍵觀察點:
lockh 持續增長 → 可能存在鎖升級或死鎖風險appctlh 異常大 → 複雜 SQL 或大量預處理語句bph 命中率低 → 需調大 BUFFERPOOL 或優化 SQLdb2pd 直接掃描 DB2 系統記憶體結構,生成詳細報告,支援全量掃描或模組化過濾,適合:
-everything -full)db2pd [-inst] [-database DBNAME | -alldatabases] [-everything] [-full] [過濾選項...]
| 選項 | 診斷場景 |
|---|---|
-agents | 代理狀態、等待事件、執行計劃 |
-applications | 應用連接資訊、SQL 文本 |
-transactions | 事務狀態、鎖持有、日誌序列號 |
-locks | 鎖等待鏈、死鎖分析 |
-bufferpools | 緩衝池命中率、頁讀寫統計 |
-logs | 日誌文件狀態、歸檔進度、寫入性能 |
-tablespaces | 表空間容量、容器狀態、高水位標 |
-dynamic / -static | 動態/靜態 SQL 緩存統計 |
-fcm | DPF 環境下節點間通訊狀態 |
-mempools / -memblocks | 記憶體池/塊級分配詳情 |
-reorg | 重組進度監控 |
-recovery | 災難恢復/前滾狀態 |
-osinfo | 作業系統資源(CPU、記憶體、磁碟) |
db2pd -database SAMPLE -logs
輸出關鍵欄位:
Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:43:48
Logs:
Current Log Number: 0
Pages Written: 0
Method 1 Archive Status: n/a
...
Address StartLSN State Size Pages Filename
0x04BBD254 0x0000036B0000 0x0 1000 1000 S0000000.LOG
0x04BBD2F4 0x000003A98000 0x0 1000 1000 S0000001.LOG
分析要點:Pages Written 長時間不變 + State 非 0 → 可能日誌寫入受阻,檢查磁碟 I/O 或歸檔掛起。
SQL0964C(記憶體不足)db2mtrk -i -d -p -w 觀察高水位標,確認是實例/資料庫/代理哪一層記憶體壓力大-mempools -agents -locks 等選項,鎖定具體池、具體代理、具體 SQLDATABASE_MEMORY、APPL_MEMORY、LOCKLIST 等配置,或優化惡性 SQLdb2mtrk -r 60 10 每分鐘採樣持續 10 分鐘,驗證調優效果-everything -full 在大型系統可能耗時較久,建議非高峰執行db2pd -database PROD -locks > /tmp/locks_$(date +%F).txt-topology、-reclaim 等選項,請參閱對應版本 db2pd -hdb2mtrk 像「CT 掃描」給記憶體分層拍片,db2pd 像「內視鏡」深入各功能模組細節。掌握兩者組合拳,讓 DB2 效能調優與故障排查從「盲人摸象」進化為「有據可依」。