首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 基礎:DB2 UDB 追蹤功能完整指南與 db2trc 實戰

     編輯:DB2 教學

前言

當 DB2 回報錯誤並建議「獲取追蹤並聯繫 IBM 支援」時,追蹤功能便成為關鍵診斷工具。DB2 追蹤記錄控制流資訊(函數呼叫與參數),能協助技術支援人員定位複雜問題。本文詳細介紹 db2trc 命令操作、追蹤選項、格式化分析與進階功能,並以實際範例示範如何捕捉緩衝池服務元件的追蹤資料。

追蹤核心概念

  • 追蹤本質:運行時捕捉的控制流日誌,包含函數進入/退出、資料、錯誤等事件。
  • 遮罩:限定特定元件(如緩衝池服務)、函數或事件類型,減少資料量。
  • 效能影響:啟用追蹤會消耗資源,嚴禁在生產環境隨意開啟,需在 IBM 支援指導下操作。

db2trc 命令架構

命令選項分為兩大類:

  • 收集類:開啟/關閉追蹤、設定緩衝區大小、指定遮罩、轉儲記憶體、清除緩衝區。
  • 解析類:依時間順序或進程/執行緒排序格式化輸出。

追蹤遮罩由五個元素組成(以句點分隔):Type.Product.Component.Function.FunctionCategory。支援萬用字元、列表、範圍,建議用雙引號包裹避免 Shell 展開星號。

實戰:捕捉緩衝池服務追蹤

步驟 1:啟動追蹤

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 記錄相對時間戳。

關鍵注意事項

  • 緩衝區大小必須為 2 的冪,向下取整;最小 1MB,Windows 預設 8MB,UNIX 預設 4MB。
  • 緩衝區大小不可動態調整,必須在 db2start 前設定。
  • 若追蹤至檔案而非記憶體,檔案大小僅受磁碟空間限制。

步驟 2:格式化追蹤檔

# 依時間順序輸出
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 支援提供精準資訊,加速問題解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved