PostgreSQL レポート取得ガイド — はじめに
Oracle AWR との対応と取得方法の概要
Oracle AWR レポートで確認できる情報を PostgreSQL で取得するには、複数の機能を組み合わせる必要があります。 本シリーズでは pg_stat_* ビュー・pg_stat_statements・EXPLAIN ANALYZE・auto_explain/スロークエリログ・pgBadger/pg_activity の5つの取得方法を個別に解説し、各方法で取得できるセクションを定義します。
1. Oracle AWR と PostgreSQL の違い
Oracle Database の AWR(Automatic Workload Repository)は、DB 全体の統計スナップショットを 自動収集・蓄積し、任意の期間のパフォーマンスレポートを生成する仕組みです。 PostgreSQL には AWR に相当する単一の統合レポート機能は存在しませんが、 システムカタログ・統計ビュー・拡張モジュールを組み合わせることで同等の情報を取得できます。
| 観点 | Oracle AWR | PostgreSQL |
|---|---|---|
| 統計収集の仕組み | 自動スナップショット(デフォルト60分間隔) | 統計コレクター(stats_collector)が累積カウンタを保持。pg_stat_reset() で初期化。 |
| レポート出力 | awrrpt.sql で HTML/TEXT レポートを生成 | 単一レポートはなく、SQL・ログ・外部ツールを組み合わせて取得 |
| SQL 統計 | SQL Statistics セクション(Elapsed Time 順など) | pg_stat_statements 拡張 / スロークエリログで取得 |
| 待機イベント | Top 5 Timed Events・Wait Event Histogram | pg_stat_activity の wait_event_type / wait_event で確認 |
| I/O 統計 | Tablespace I/O・File I/O | pg_statio_user_tables / pg_statio_user_indexes で取得 |
| 履歴保持 | AWR 保存期間(デフォルト8日)内で任意期間比較可能 | 累積統計は再起動またはリセットまで保持。履歴化には pg_stat_statements の定期スナップショットが必要。 |
| 実行計画 | SQL実行計画はAWRに自動保存 | EXPLAIN ANALYZE または auto_explain で個別に取得 |
本シリーズは PostgreSQL 14 以降を対象としています。pg_stat_statements の
toplevel 列や待機イベントの細分化など、バージョンによって利用可能な列・機能が異なります。
PostgreSQL 16/17 では統計情報のリセット粒度がさらに改善されています。
2. PostgreSQL における5つの取得方法
① pg_stat_* ビュー(PART 02)
PostgreSQL 組み込みの統計ビュー群。テーブル・インデックス・I/O・接続・レプリケーション・
バキューム・バッファキャッシュなどをシステムカタログとして常時提供する。
Oracle AWR の Instance Activity・I/O・Buffer Pool 統計に対応する情報源。
pg_stat_bgwriter・pg_stat_database などを SQL で参照する。
② pg_stat_statements(PART 03)
拡張モジュール pg_stat_statements が提供するビュー。
実行されたすべての SQL の累積実行時間・呼び出し回数・行数・ブロック I/O などを記録する。
Oracle AWR の SQL Statistics セクションに最も近い情報源。
shared_preload_libraries への追加が必要。
③ EXPLAIN / EXPLAIN ANALYZE(PART 04)
個々の SQL の実行計画とコストを取得するコマンド。
EXPLAIN ANALYZE では実際の実行時間・行数・バッファ使用量も取得できる。
Oracle の EXPLAIN PLAN + DBMS_XPLAN に相当。重いクエリの原因特定に使用する。
④ auto_explain / スロークエリログ(PART 05)
auto_explain はしきい値を超えたクエリの実行計画を自動でログに出力する拡張モジュール。
log_min_duration_statement はしきい値超のクエリをログに記録する組み込み設定。
Oracle AWR の SQL Statistics(重い SQL の自動検出)に対応。
⑤ pgBadger / pg_activity(PART 06)
pgBadger は PostgreSQL ログを解析して HTML レポートを生成する外部ツール。
pg_activity は top コマンド風のリアルタイム監視ツール。
Oracle の AWR レポート HTML 出力・Enterprise Manager に相当する可視化手段。
3. AWR セクションと PostgreSQL 取得方法の対応表
| AWR セクション | ① pg_stat_* |
② pg_stat_ statements |
③ EXPLAIN ANALYZE |
④ auto_explain/ スロークエリ |
⑤ pgBadger/ pg_activity |
|---|---|---|---|---|---|
| DB Time / Elapsed Time | ○ | ◎ | ◎ | ○ | ◎ |
| Top 5 Timed Events(待機イベント) | ◎ | — | — | — | ◎ |
| SQL Statistics(重い SQL) | — | ◎ | ◎ | ◎ | ◎ |
| Instance Activity(接続数・コミット数など) | ◎ | — | — | — | ○ |
| I/O Statistics(ファイル I/O) | ◎ | ○ | ○ | — | ○ |
| Buffer Pool / Memory(共有バッファ) | ◎ | ○ | ○ | — | ○ |
| Lock Statistics(ロック待ち) | ◎ | — | — | — | ◎ |
| Segment Statistics(テーブル/インデックス別 I/O) | ◎ | — | ○ | — | ○ |
| 実行計画(アクセスパス) | — | △ | ◎ | ◎ | △ |
| DB パラメータ(初期化パラメータ) | ◎ | — | — | — | — |
| バキューム / 自動バキューム統計 | ◎ | — | — | — | ○ |
◎ = 詳細情報が取得可能 / ○ = 一部取得可能 / △ = 限定的 / — = 対応なし
4. 対応バージョン
| 機能 | PostgreSQL 12 | PostgreSQL 14 | PostgreSQL 16/17 |
|---|---|---|---|
| pg_stat_* ビュー基本 | ◎ | ◎ | ◎ |
| pg_stat_statements | ○ | ◎ | ◎ |
| pg_stat_statements(toplevel 列) | — | ◎ | ◎ |
| EXPLAIN ANALYZE(BUFFERS) | ◎ | ◎ | ◎ |
| auto_explain | ◎ | ◎ | ◎ |
| pgBadger(外部ツール) | ◎ | ◎ | ◎ |
| pg_stat_io(I/O 詳細統計) | — | — | ◎(16+) |
| pg_stat_statements(wal 統計) | — | ◎ | ◎ |
| 統計リセット粒度の改善 | △ | ○ | ◎(16+) |
5. シリーズ構成
| PART | タイトル | 主な対応 AWR セクション |
|---|---|---|
| PART 01(本記事) | はじめに — Oracle AWR との対応と取得方法の概要 | 全体概要・対応表 |
| PART 02 | pg_stat_* ビューによる取得とセクション定義 | 待機イベント・接続統計・I/O・バッファ・バキューム・ロック |
| PART 03 | pg_stat_statements による取得とセクション定義 | SQL Statistics(重い SQL の特定)・実行回数・I/O |
| PART 04 | EXPLAIN / EXPLAIN ANALYZE による取得とセクション定義 | 実行計画・アクセスパス・バッファ使用量・結合方式 |
| PART 05 | auto_explain / スロークエリログによる取得とセクション定義 | SQL Statistics(重い SQL の自動検出)・実行計画の自動記録 |
| PART 06 | pgBadger / pg_activity による取得とセクション定義 | SQL Statistics・待機イベント・接続統計・レポート生成 |