db2pd の概要と特徴

db2pd は DB2 エンジンのメモリ構造を直接参照するオンライン診断ツールです。スナップショット機能とは独立して動作するため、モニタスイッチのオン/オフに関係なく情報を取得できる点が大きな特徴です。

主な特徴

  • DB2 エンジンが稼働中であれば、任意のタイミングで取得可能
  • ロック競合・デッドロック・スローSQL の即時診断に特化
  • 出力はテキスト形式(ファイルへのリダイレクトが可能)
  • エンジン停止後の一部診断(-osscollect など)も可能
  • 複数のオプションを組み合わせて一括取得できる

実行権限

SYSADM / SYSCTRL / SYSMAINT いずれかの権限が必要です。OS の DB2 管理グループ(db2iadm など)に所属するユーザでも実行できます。

基本構文

db2pd -db <データベース名> [オプション...] [-file <出力ファイル>]

-db オプションで対象データベースを指定します。省略すると全データベースが対象になります。

主要オプション一覧

オプション 取得情報 Oracle AWR 対応セクション
-locks ロック情報(保有・待機) Enqueue Activity / Wait Statistics
-wlocks ロック待機中のアプリケーション Top 5 Wait Events(DB Lock)
-transactions トランザクション情報 Instance Activity Statistics
-agents エージェント(接続セッション)情報 Report Summary(接続数)
-bufferpools バッファプール統計 Buffer Pool Statistics
-dynamic 動的 SQL キャッシュ統計 SQL Statistics(Top SQL)
-static 静的 SQL(パッケージ)キャッシュ SQL Statistics
-logs ログ統計(ログ使用量・書き込み) Instance Activity(redo)
-mempools メモリプール使用状況 Memory Statistics / SGA
-memblocks メモリブロック詳細 Memory Statistics(詳細)
-tablespaces テーブルスペース情報 IO Stats(Tablespace)
-hadr HADR(高可用性)状態 (DB2 固有)
-applications 接続アプリケーション詳細 Report Summary(アプリ接続)
-tcbstats テーブル・インデックスのアクセス統計 Segment Statistics

セクション定義表

db2pd の主要な出力セクションについて、各項目の意味・読み方・異常値の目安を以下に定義します。

① Locks(-locks)

項目 何を表すか 読み方・異常値の目安
HoldCount ロックを保有しているエージェント数 大量保有時はコミット漏れ・長時間トランザクションを疑う
WaitCount ロック待機しているエージェント数 1以上で競合発生中。増加傾向はロック設計見直しのサイン
LockList ロックの種類(S/X/U/IS/IX/SIX) X ロックの長時間保有・IS と X の競合は要注意
Deadlock デッドロック発生フラグ 1でデッドロック発生。Event Monitor と組み合わせて詳細確認
LockEscalation ロックエスカレーション回数 頻発時は MAXLOCKS / LOCKLIST パラメータの見直しを検討

② Buffer Pools(-bufferpools)

項目 何を表すか 読み方・異常値の目安
BpName バッファプール名 IBMDEFAULTBP 以外に複数存在する場合は個別確認
HitRatio バッファプールヒット率(論理読み込みに対する物理読み込みの割合) 95%以上が目安。90%未満でバッファプールサイズ増加を検討
DataHitRatio データページのヒット率 Oracle の Buffer Cache Hit Ratio に相当。90%未満は要注意
IdxHitRatio インデックスページのヒット率 通常はデータより高くなる。低下時はインデックスサイズ確認
PhysicalReads 物理読み込み回数(累積) 急増時は SQL の全表スキャン増加・バッファ不足を疑う
AsynchReads 非同期(プリフェッチ)読み込み回数 PhysicalReads の大半を占めるのが理想。低い場合はプリフェッチ設定を確認

③ Dynamic SQL(-dynamic)

項目 何を表すか 読み方・異常値の目安
NumExecutions SQL の実行回数(キャッシュ内累積) 頻繁に実行される SQL を特定するための基本指標
TotalExecTime 累積実行時間(ミリ秒) TotalExecTime / NumExecutions で平均応答時間を算出
TotalSortTime ソートに費やした累積時間 高い場合はソートキー・インデックス・SORTHEAP の見直しを検討
TotalUserCpuTime ユーザー CPU 消費時間(累積) CPU 負荷の高い SQL 特定に使用。Oracle の CPU Time Top SQL に相当
NumSortsOverflow ソートがオーバーフローした回数(一時領域使用) 1以上で SORTHEAP 不足。増加傾向は性能劣化の予兆
StatementText SQL テキスト(先頭 256 バイト) 原因 SQL の特定に使用。PKGID / SECTNO と組み合わせて完全テキストを確認

④ Logs(-logs)

項目 何を表すか 読み方・異常値の目安
Current Log 現在使用中のログファイル番号 急速に増加している場合は大量更新トランザクションを疑う
LogsAvailable 残り使用可能なログ数 0 に近づくと LOGFULL エラーが発生する。最低でも 10 以上の余裕を確保
LogUsed 現在使用中のログ容量(バイト) 全ログ容量の 80% を超えたら増設を検討
DirtyPages 更新されたがまだログに書き込まれていないページ数 増大時はコミット遅延・チェックポイント間隔の見直しを行う

⑤ Memory Pools(-mempools)

項目 何を表すか 読み方・異常値の目安
PoolName メモリプール名(DBMS / DB / APP / OTHER) 用途別にメモリ使用量を把握する
MemSize 現在の使用サイズ(KB) Oracle の SGA コンポーネントに相当
MaxMem 最大使用サイズ(KB) MaxMem が MemSize に近い場合は上限設定の見直しを検討
Watermark ハイウォーターマーク(ピーク使用量) 設定上限の 90% を超えている場合は増設を検討

⑥ Tablespaces(-tablespaces)

項目 何を表すか 読み方・異常値の目安
TbspName テーブルスペース名 SYSCATSPACE / USERSPACE / TEMPSPACE の3種類が基本
TotalPages テーブルスペースの総ページ数 UsablePages との差が断片化・フリースペースを示す
UsedPages 使用中ページ数 TotalPages の 90% 超で残容量不足。REBALANCE / EXTEND を検討
State テーブルスペースの状態(NORMAL / BACKUP_PENDING など) NORMAL 以外は即時確認。BACKUP_PENDING はバックアップ実行が必要

取得コマンド例

ロック競合の即時確認

# ロック待機情報のみを抜き出す
db2pd -db SAMPLE -wlocks

# 保有ロックも含めた全ロック情報
db2pd -db SAMPLE -locks detail

バッファプール統計の取得

db2pd -db SAMPLE -bufferpools

スロー SQL の特定

# 動的SQLキャッシュを取得(実行時間でソートして確認)
db2pd -db SAMPLE -dynamic

一括診断情報の取得(ファイル出力)

# よく使う診断情報を一括取得してファイルへ保存
db2pd -db SAMPLE -locks -bufferpools -dynamic -logs -mempools -tablespaces \
  -file /tmp/db2pd_report_$(date +%Y%m%d_%H%M%S).txt

全データベースの状態確認

# データベースを指定しない場合はインスタンス全体が対象
db2pd -alldbs -agents

注意事項

  • 累積値: db2pd の多くの統計は DB2 インスタンス起動時(または RESET MONITOR 実行時)からの累積値です。差分を取るには2時点で取得して比較する必要があります。
  • メモリ直接参照: db2pd はエンジンのメモリを直接参照するため、稀に DB2 の内部処理と競合して不完全な情報が返ることがあります。重要な診断では複数回取得して確認してください。
  • Dynamic SQL キャッシュ: -dynamic で取得できる情報はキャッシュに残っている SQL のみです。キャッシュが溢れると古い情報は失われます。PKGCACHESZ パラメータでキャッシュサイズを調整できます。
  • HADRスタンバイ: HADR スタンバイ機では一部のオプション(-transactions など)が動作しない場合があります。