本シリーズの位置づけ
Oracle Database には AWR(Automatic Workload Repository)というパフォーマンス情報の自動収集・レポート機能があります。定期スナップショットをベースに、待機イベント・SQL統計・I/O・メモリなどを一元的に把握できる強力なツールです。
一方 IBM DB2 には AWR に相当する単一の「レポート」機能はありませんが、複数のツールや SQL 関数を組み合わせることで同等以上の情報を取得できます。本シリーズでは、それらの取得方法を取得手段ごとに分類し、各出力セクションの意味・読み方・注意点を体系的に定義します。
想定読者
- Oracle DBA であり、初めて DB2 環境のパフォーマンス調査を担当することになった方
- DB2 環境でボトルネック調査・チューニングに取り組むエンジニア
- DB2 の監視情報をレポートとして整理・体系化したい方
対象バージョン
本シリーズは DB2 LUW(Linux/UNIX/Windows)V10.5 以降を対象とします。V11.1・V11.5 でも同様に参照できます。MON_GET_* 関数については V9.7 以降が必要です。
Oracle AWR との対応関係
Oracle AWR の主要セクションと、DB2 で同等情報を取得できる手段の対応を下表に示します。
| Oracle AWR セクション | DB2 相当の取得方法 | 主な取得手段 |
|---|---|---|
| Report Summary(DB Time / Load Profile) | データベーススナップショット / MON_GET_DATABASE | GET SNAPSHOT / MON_GET_* |
| Top 10 Foreground Wait Events | 待機イベント統計 | MON_GET_WORKLOAD / db2pd -wlocks |
| SQL Statistics(Top SQL) | SQL ステートメント統計 | MON_GET_PKG_CACHE_STMT / db2pd -dynamic |
| Instance Activity Statistics | データベースマネージャスナップショット | GET SNAPSHOT FOR DBM / MON_GET_DATABASE |
| IO Stats(Tablespace/File) | テーブルスペース I/O 統計 | GET SNAPSHOT FOR TABLESPACES / MON_GET_TABLESPACE |
| Buffer Pool Statistics | バッファプール統計 | GET SNAPSHOT FOR BUFFERPOOLS / MON_GET_BUFFERPOOL |
| Latch / Lock Statistics | ロック統計・デッドロック情報 | db2pd -locks / Event Monitor(DEADLOCK) |
| Memory Statistics | メモリプール統計 | db2pd -mempools / MON_GET_MEMORY_POOL |
| Segment Statistics | テーブル・インデックス統計 | SYSCAT.TABLES / MON_GET_TABLE |
DB2 の5つの取得方法
DB2 では以下の5つの方法でパフォーマンス情報を取得できます。各 PART でそれぞれを詳しく解説します。
① db2pd コマンド
DB2 プロセスの内部状態をオンラインで確認できる診断コマンドです。DB2 エンジンを停止せずにロック・バッファプール・SQL・ログ・メモリなどのリアルタイム情報を取得します。エンジンが停止した状態でも一部の情報を取得できる点が特徴です。
- 特徴: ロック/待機のリアルタイム確認に最適。スナップショット機能に依存しない
- 主な用途: 障害発生時の即時診断、ロック競合・デッドロック調査
- 要件: DB2 管理者権限(SYSADM / SYSCTRL / SYSMAINT)
② GET SNAPSHOT コマンド
DB2 の従来型パフォーマンスモニタリング機能です。DATABASE / APPLICATION / TABLE / TABLESPACE / BUFFERPOOL / DBM などのカテゴリ別にスナップショットを取得します。DB2 V9.7 以前の環境でも使用できる歴史ある手法です。
- 特徴: カテゴリ別の詳細スナップショット。出力形式はテキスト
- 主な用途: バッファプール・接続数・ロック全体の把握
- 要件: SYSADM / SYSCTRL / SYSMAINT / SYSMON 権限
③ MON_GET_* 関数(SQL)
DB2 V9.7 で導入された SQL ベースのモニタリング関数群です。テーブル関数として呼び出し、結果を SELECT で加工・フィルタリングできます。AWR に最も近い使い勝手を提供し、定期実行・比較分析にも適しています。
- 特徴: SQL で柔軟に加工可能。WHERE / ORDER BY / GROUP BY が使える
- 主な用途: 定期スナップショット、差分分析、性能レポート自動化
- 要件: DB2 V9.7 以降、EXECUTE 権限
④ db2top コマンド
Linux / UNIX 系の top コマンドに似たリアルタイム監視ツールです。接続セッション・SQL・バッファプール・テーブルスペースなどをインタラクティブに確認できます。
- 特徴: リアルタイム表示。直感的なキー操作で画面を切り替え可能
- 主な用途: 問題発生中のリアルタイム状況把握
- 要件: Linux/UNIX 環境、SYSADM / SYSCTRL / SYSMAINT / SYSMON 権限
⑤ Event Monitor
特定のイベント(SQL 実行・デッドロック・接続・スレッドなど)が発生したタイミングで情報を記録する仕組みです。AWR の SQL Statistics(詳細)や Enqueue Activity に相当するイベント単位の情報収集に利用します。
- 特徴: イベント発生時の詳細情報を記録。デッドロック分析に必須
- 主な用途: SQL 詳細トレース、デッドロック調査、接続単位の統計
- 要件: DBADM / SQLADM 権限、事前作成が必要
取得方法の比較・使い分け
| 取得方法 | リアルタイム | 履歴/差分 | SQL加工 | 主なシーン |
|---|---|---|---|---|
| db2pd | ◎ | △(一部) | ✗ | ロック競合・障害の即時診断 |
| GET SNAPSHOT | ○ | △(手動差分) | △(テキスト出力) | 全体スナップショットの定期取得 |
| MON_GET_* 関数 | ○ | ◎ | ◎ | 定期レポート・差分分析・自動化 |
| db2top | ◎ | ✗ | ✗ | 発生中の問題のリアルタイム監視 |
| Event Monitor | ○(非同期) | ◎ | ○(テーブル型) | デッドロック・SQL詳細トレース |
推奨アプローチ: 通常の定期性能分析には MON_GET_* 関数を主軸とし、障害・ロック競合の即時確認には db2pd を補完的に使う構成が Oracle AWR に最も近い運用スタイルです。
本シリーズの構成
各 PART では以下の観点で情報を整理します。
- 取得コマンド / SQL: 実際に使用するコマンドや SQL の構文例
- セクション定義表: 各出力セクションについて「何を表すか」「主要な出力項目」「読み方」「異常値の目安」「関連情報」をまとめた定義表
- Oracle AWR との対応: AWR のどのセクションに相当するかを明記
| PART | 取得方法 | 主なカバー領域 |
|---|---|---|
| PART 01 | はじめに(本記事) | 概要・対応関係・使い分け |
| PART 02 | db2pd コマンド | ロック・バッファ・SQL・メモリ・ログ(リアルタイム) |
| PART 03 | GET SNAPSHOT コマンド | DATABASE / APPLICATION / TABLESPACE / BUFFERPOOL / DBM |
| PART 04 | MON_GET_* 関数(SQL) | DB / ワークロード / SQL / バッファプール / テーブルスペース / メモリ |
| PART 05 | db2top コマンド | セッション・SQL・バッファ・テーブルスペース(リアルタイム) |
| PART 06 | Event Monitor | SQL 詳細・デッドロック・接続・スレッド |