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_* 関数を使用してください。