當 DB2 回報錯誤並建議「獲取追蹤並聯繫 IBM 支援」時,追蹤功能便成為關鍵診斷工具。DB2 追蹤記錄控制流資訊(函數呼叫與參數),能協助技術支援人員定位複雜問題。本文詳細介紹 db2trc 命令操作、追蹤選項、格式化分析與進階功能,並以實際範例示範如何捕捉緩衝池服務元件的追蹤資料。
命令選項分為兩大類:
追蹤遮罩由五個元素組成(以句點分隔):Type.Product.Component.Function.FunctionCategory。支援萬用字元、列表、範圍,建議用雙引號包裹避免 Shell 展開星號。
db2trc on -i 8m -m "*.*.2.*.*" -t
db2start
db2trc clear
db2 connect to sample
db2trc dump dmp
db2trc off
參數說明:-i 8m 設 8MB 共享記憶體緩衝區(滿即停止),-m "*.*.2.*.*" 只追蹤元件編號 2(緩衝池服務),-t 記錄相對時間戳。
db2start 前設定。# 依時間順序輸出
db2trc format dmp fmt
# 依進程/執行緒產生控制流圖
db2trc flow dmp flw
# 查看追蹤參數摘要
db2trc info dmp
1 entry DB2 UDB buffer pool services sqlbGetTotalBufferPoolMemSize cei (1.3.2.537.2)
pid 23494 tid 1 cpid -1 node 0 sec 0 nsec 0
2 entry DB2 UDB buffer pool services sqlbpfDbheapSize fnc (1.3.2.404.0)
pid 23494 tid 1 cpid -1 node 0 sec 0 nsec 5659
...
2846 exit DB2 UDB buffer pool services sqlbCheckBPFConsistancy fnc (2.3.2.273.0)
pid 23494 tid 1 cpid -1 node 0 sec 0 nsec 361858476
rc = 0
每筆記錄含事件類型、產品、元件、函數、類別、進程/執行緒 ID、相對時間戳。若為探測點,另含探測編號與資料十六進制傾印。
pid = 19834 tid = 1 node = 0
846 sqlbPFPrefetcherEntryPoint entry
847 sqlbPFPrefetcherEntryPoint data [probe 0]
848 | sqlbPFInitPrefetcher entry
849 | sqlbPFInitPrefetcher data [probe 0]
850 | | sqlbConnectToSharedMemory entry
851 | | sqlbConnectToSharedMemory exit
...
以縮排呈現呼叫堆疊,清晰展現控制流向。
| 選項 | 用途 |
|---|---|
-perfcount | 記錄每個函數被呼叫總次數;配合 -t 統計耗時。 |
perffmt | 將效能計數器資料格式化為可讀文字。 |
change | 動態變更進行中追蹤的選項。 |
-resume | 恢復被暫停進程的執行(需配合 -suspend)。 |
dump -q | 靜默模式轉儲,不列印標準輸出訊息。 |
stop | 暫停追蹤但保留緩衝區內容,供後續轉儲。 |
-c cpid | 只追蹤指定同伴進程。 |
-rc return-code | 將指定返回碼視為系統錯誤處理。 |
-e max-sys-errors | 達到指定系統錯誤次數即停止追蹤。 |
-crash point | 在指定追蹤點使進程崩潰(僅限 IBM 支援指導下使用)。 |
-passno i | 在第 i 次觸發崩潰點時才崩潰。 |
-sleep s | 進程休眠 s 秒而非崩潰。 |
-signum n | 發送信號 n 而非崩潰。 |
-pause | 進程暫停等待信號。 |
-suspend | 進程掛起執行。 |
-softcrash | 中斷代理程序而非崩潰。 |
db2 connect reset
db2stop
db2trc on -i 8m -perfcount -t -m "*.*.2.*.*"
db2start
db2trc clear
db2 connect to sample
db2trc dump dmp1
db2trc off
db2trc perffmt dmp1 pfmt
輸出範例:
13 (0 sec, 28978 nanosec) sqlbReducePagesPinned
8 (0 sec, 114614 nanosec) sqlbLoadContainerList
1 (0 sec, 6309 nanosec) sqlbAllocateBuckets
1 (0 sec, 28228 nanosec) sqlbpfCreateQ
4 (0 sec, 195840 nanosec) sqlbConnectToSharedMemory
...
顯示各函數呼叫次數與累計耗時,助於效能熱點分析。
DB2 追蹤是深度診斷的利器,但需謹慎使用。建議在測試環境熟悉 db2trc 各項功能,掌握遮罩設計、緩衝區設定與格式化分析技巧,以便在關鍵時刻為 IBM 支援提供精準資訊,加速問題解決。