GET SNAPSHOT の概要と特徴

GET SNAPSHOT は DB2 V1 から存在する伝統的なパフォーマンスモニタリング機能です。データベース・アプリケーション・テーブルスペース・バッファプール・テーブル・ロックなど、カテゴリごとに統計情報をまとめて取得します。

主な特徴

  • カテゴリ別に詳細な統計情報を取得可能
  • DB2 V9.7 以前の環境でも使用できる互換性の高い手法
  • 出力はテキスト形式。ファイルへのリダイレクトが可能
  • モニタースイッチにより収集する情報を制御する

実行権限

SYSADM / SYSCTRL / SYSMAINT / SYSMON いずれかの権限が必要です。

モニタースイッチの設定

GET SNAPSHOT で取得できる情報の種類はモニタースイッチによって制御されます。必要なスイッチを事前に有効化しておく必要があります。

スイッチ名 収集情報 デフォルト
UOW 作業単位(トランザクション)統計 OFF
STATEMENT SQL 実行統計 OFF
TABLE テーブルアクセス統計 OFF
BUFFERPOOL バッファプール統計 ON
LOCK ロック統計 ON
SORT ソート統計 ON

モニタースイッチの有効化

-- セッションレベルで有効化
UPDATE MONITOR SWITCHES USING UOW ON STATEMENT ON TABLE ON;

-- インスタンスレベルで有効化(DBM CFG)
UPDATE DBM CFG USING DFT_MON_UOW ON DFT_MON_STMT ON DFT_MON_TABLE ON;

スナップショットカテゴリ一覧

カテゴリ コマンド Oracle AWR 対応
データベース GET SNAPSHOT FOR DATABASE ON <dbname> Report Summary / Instance Activity
アプリケーション GET SNAPSHOT FOR APPLICATIONS ON <dbname> Report Summary(接続)/ SQL Statistics
テーブルスペース GET SNAPSHOT FOR TABLESPACES ON <dbname> IO Stats(Tablespace)
バッファプール GET SNAPSHOT FOR BUFFERPOOLS ON <dbname> Buffer Pool Statistics
テーブル GET SNAPSHOT FOR TABLES ON <dbname> Segment Statistics
ロック GET SNAPSHOT FOR LOCKS ON <dbname> Wait Statistics / Enqueue Activity
データベースマネージャ GET SNAPSHOT FOR DBM Report Summary(インスタンス全体)
全情報 GET SNAPSHOT FOR ALL ON <dbname> 全セクション一括

セクション定義表

① Database Snapshot

Oracle AWR の Report Summary / Instance Activity に相当します。データベース全体の累積統計を取得します。

項目 何を表すか 読み方・異常値の目安
Database status データベースの現在の状態 ACTIVE 以外(QUIESCE_PEND / QUIESCED 等)は要確認
Applications connected 現在の接続アプリケーション数 MAXAPPLS 設定値に近い場合は接続制限に注意
Commit statements attempted コミット実行回数(累積) 単位時間あたりのスループット算出に使用
Rollback statements attempted ロールバック実行回数(累積) 高頻度の場合はアプリケーションの例外処理を確認
Total sorts ソート実行回数(累積) Sort overflows との比率を確認。オーバーフロー率 5% 超は SORTHEAP 不足
Sort overflows ソートが一時領域にスピルした回数 増加傾向は SORTHEAP の増加またはクエリ最適化を検討
Deadlocks detected 検出されたデッドロック数(累積) 1 以上で要調査。Event Monitor と組み合わせて原因 SQL を特定
Lock escalations ロックエスカレーション回数(累積) 頻発時は LOCKLIST / MAXLOCKS パラメータを増加
Rows read 読み取った行数(累積) Rows selected との比率(フィルタ率)で無駄なスキャンを確認
Rows written 書き込んだ行数(更新・挿入・削除)(累積) 急増時は大量 DML の実行状況を確認

② Application Snapshot

Oracle AWR の SQL Statistics(アプリ単位)に相当します。接続中のアプリケーションごとの統計を取得します。

項目 何を表すか 読み方・異常値の目安
Application handle アプリケーションの識別子 ロック待機時の保有者・待機者特定に使用
Application status アプリケーションの状態(UOW Executing / Lock wait 等) Lock wait が長時間続く場合は競合発生中
Status change time 最後に状態が変わった時刻 現在時刻との差が大きい場合は長時間待機・処理中を示す
Rows read このアプリケーションが読み取った行数 突出して多い場合は全表スキャン・非効率な SQL の候補
SQL statements attempted 実行した SQL 数 高頻度アプリケーションの特定に使用

③ Tablespace Snapshot

Oracle AWR の IO Stats(Tablespace)に相当します。テーブルスペース単位の I/O 統計を取得します。

項目 何を表すか 読み方・異常値の目安
Tablespace name テーブルスペース名 SYSCATSPACE / TEMPSPACE は特に I/O 負荷に注目
Tablespace State テーブルスペース状態 NORMAL 以外は即時確認(BACKUP_PENDING / OFFLINE 等)
Total pages テーブルスペースの総ページ数 Usable pages との差でオーバーヘッドを把握
Usable pages 実際に使用可能なページ数 Used pages が Usable pages の 90% 超で拡張を検討
Used pages 使用中のページ数 急増時は不要データの削除・テーブルスペース拡張を検討
Physical reads 物理読み込み回数(累積) このテーブルスペースの I/O 負荷の主要指標

④ Buffer Pool Snapshot

Oracle AWR の Buffer Pool Statistics に相当します。バッファプール単位のキャッシュ効率を取得します。

項目 何を表すか 読み方・異常値の目安
Buffer pool name バッファプール名 複数のバッファプール構成の場合は個別に確認
Buffer pool data logical reads 論理読み込み(キャッシュアクセス)回数 ヒット率の分母。Oracle の Logical Reads に相当
Buffer pool data physical reads 物理読み込み(ディスク I/O)回数 ヒット率の計算: 1 - (Physical / Logical)。90% 未満は要注意
Buffer pool index logical reads インデックスページの論理読み込み回数 インデックスキャッシュヒット率の算出に使用
Buffer pool index physical reads インデックスページの物理読み込み回数 インデックスヒット率が低い場合はバッファプールサイズを増加
Asynchronous read requests 非同期(プリフェッチ)の読み込み要求回数 Physical reads の大半を占めるのが理想的な状態
Pool pages read バッファプールに読み込まれたページ数 I/O の総量を把握する基本指標

⑤ Database Manager Snapshot(DBM)

Oracle AWR の Report Summary(インスタンス情報)に相当します。DB2 インスタンス全体の情報を取得します。

項目 何を表すか 読み方・異常値の目安
DB2 instance name インスタンス名 環境確認用
Database manager status インスタンスの状態 ACTIVE 以外は要確認
Node type ノードタイプ(Enterprise Server / Client 等) エディションの確認に使用
Maximum agents registered 登録されたエージェントの最大数 MAXAGENTS 設定との比較で接続枯渇リスクを評価
High water mark for agents registered エージェント登録数のハイウォーターマーク MAXAGENTS の 80% を超えた記録がある場合は増加を検討

取得コマンド例

データベーススナップショットの取得

-- CLP(コマンドラインプロセッサ)から実行
db2 GET SNAPSHOT FOR DATABASE ON SAMPLE

-- ファイルへ保存
db2 GET SNAPSHOT FOR DATABASE ON SAMPLE > /tmp/snap_db_$(date +%Y%m%d_%H%M%S).txt

全スナップショットの一括取得

db2 GET SNAPSHOT FOR ALL ON SAMPLE > /tmp/snap_all_$(date +%Y%m%d_%H%M%S).txt

バッファプールスナップショットの取得

db2 GET SNAPSHOT FOR BUFFERPOOLS ON SAMPLE

スナップショットのリセット(差分測定の開始点)

-- モニター統計をリセット(0にリセットされる)
db2 RESET MONITOR FOR DATABASE SAMPLE

-- 任意の時間後に再取得して差分を分析
db2 GET SNAPSHOT FOR DATABASE ON SAMPLE

特定アプリケーションのスナップショット

-- アプリケーションハンドルを指定(db2pd -applicationsで確認)
db2 GET SNAPSHOT FOR APPLICATION AGENTID 123

注意事項

  • 累積値: GET SNAPSHOT の統計値はインスタンス起動時または RESET MONITOR 実行時からの累積です。定期的な差分分析には MON_GET_* 関数(PART 04)の方が適しています。
  • モニタースイッチ: TABLE / STATEMENT / UOW スナップショットはデフォルトで OFF です。取得前に必ずスイッチを有効化してください。
  • V10.5 以降: DB2 V10.5 以降では GET SNAPSHOT は deprecated(非推奨)扱いとなっています。新規環境では MON_GET_* 関数の使用を推奨します。
  • TEXT 形式の制限: テキスト出力のため、複数時点の比較や集計には一工夫が必要です。スクリプトで差分を計算するか、MON_GET_* 関数を使用してください。