DataBase / PostgreSQL / レポート取得ガイド
pgBadger / pg_activity による取得とセクション定義
pgBadger は PostgreSQL のログファイルを解析し、Oracle AWR の HTML レポートに相当する
インタラクティブなレポートを生成する外部ツールです。
pg_activity は top コマンド風のリアルタイム監視ツールです。
本記事ではインストール・設定・主要オプションと出力セクションの定義を解説します。
1. pgBadger のインストールと前提設定
# RHEL / Rocky / AlmaLinux
sudo dnf install pgbadger
# Ubuntu / Debian
sudo apt install pgbadger
# Perl モジュールから手動インストール
sudo cpan install pgBadger
# バージョン確認
pgbadger --version
# ログ収集を有効化
logging_collector = on
log_destination = 'stderr' # または csvlog / jsonlog
# スロークエリのしきい値(pgBadger はスロークエリ統計が中心)
log_min_duration_statement = 0 # 全クエリ記録(テスト時)または 1000(1秒)
# pgBadger が解析に使用するプレフィックス形式(推奨)
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
# その他 pgBadger が活用するログ設定
log_checkpoints = on # チェックポイント情報をログに出力
log_connections = on # 接続ログ
log_disconnections = on # 切断ログ
log_lock_waits = on # ロック待ちが deadlock_timeout を超えた場合に記録
log_temp_files = 0 # 一時ファイルの作成をすべて記録
log_autovacuum_min_duration = 0 # 自動バキュームをすべてログに記録
⚠️ log_min_duration_statement = 0 は本番注意
全クエリをログに記録するとログファイルが急速に増大し、ディスク I/O に影響します。 本番環境では 1000〜5000ms 程度から始め、ログ量を確認しながら調整してください。
全クエリをログに記録するとログファイルが急速に増大し、ディスク I/O に影響します。 本番環境では 1000〜5000ms 程度から始め、ログ量を確認しながら調整してください。
2. pgBadger の実行と主要オプション
# 基本:ログファイルを解析して HTML レポートを生成
pgbadger /var/log/postgresql/postgresql-2026-05-29.log -o report.html
# 複数ログファイルの解析
pgbadger /var/log/postgresql/postgresql-*.log -o report.html
# ログ形式を明示的に指定
pgbadger --format stderr /var/log/postgresql/postgresql-2026-05-29.log -o report.html
pgbadger --format csv /var/log/postgresql/postgresql-2026-05-29.csv -o report.html
# 並列処理で高速化(CPU コア数を指定)
pgbadger -j 4 /var/log/postgresql/postgresql-*.log -o report.html
# スロークエリのしきい値(ms)を指定(ログ設定の上書き)
pgbadger --min-duration 500 /var/log/postgresql/postgresql-2026-05-29.log -o report.html
# 特定の時間帯のみ解析
pgbadger --begin "2026-05-29 10:00:00" --end "2026-05-29 12:00:00" \
/var/log/postgresql/postgresql-2026-05-29.log -o report.html
# データベース・ユーザー・アプリで絞り込み
pgbadger --dbname mydb --dbuser appuser \
/var/log/postgresql/postgresql-2026-05-29.log -o report.html
# JSON 形式で出力(他ツールとの連携向け)
pgbadger /var/log/postgresql/postgresql-2026-05-29.log -o report.json --format json
# 差分レポート(増分解析)
pgbadger --incremental -I /var/report/incremental/ \
/var/log/postgresql/postgresql-2026-05-29.log
| オプション | 説明 |
|---|---|
| -o / --outfile | 出力ファイルパス。拡張子で形式を自動判定(.html / .json / .txt)。 |
| -j / --jobs | 並列処理の CPU コア数。大きなログファイルの解析を高速化。 |
| --format | ログ形式の明示指定。stderr(デフォルト)/syslog/csv/jsonlog。 |
| --prefix | log_line_prefix の値を指定。自動検出できない場合に使用。 |
| --top | 各セクションで表示するクエリ数(デフォルト:20)。 |
| --incremental | 増分解析モード。前回の解析結果からの差分のみを処理。定期実行に適する。 |
3. pgBadger レポートのセクション定義
セクション定義: pgBadger HTML レポート
| セクション名 | 説明 | Oracle AWR 対応 |
|---|---|---|
| Overall statistics | 解析期間・処理クエリ数・接続数・ログエントリ数などの全体サマリ。 | Report Summary |
| Queries per second | 時間帯別のクエリ数グラフ。ピーク時間帯の特定に使用。 | Activity Statistics(時間帯別) |
| Slowest individual queries | 個別の最も遅いクエリ(実行時間順)。実行計画と一緒に表示(auto_explain 有効時)。 | SQL ordered by Elapsed Time |
| Queries that took up the most time | 累積実行時間(合計)の多いクエリパターン上位。Oracle AWR SQL Statistics の最重要指標に相当。 | SQL ordered by Elapsed Time(合計) |
| Most frequent queries | 実行回数(頻度)が最も多いクエリパターン上位。 | SQL ordered by Executions |
| Normalized slowest queries | 正規化されたクエリパターン別の最大・平均実行時間。 | SQL Statistics(正規化) |
| Histogram of query times | クエリ実行時間の分布ヒストグラム(0-1ms / 1-5ms / 5-10ms など)。 | SQL Elapsed Time Histogram |
| Connections per database / user / host | データベース・ユーザー・クライアントホスト別の接続数。 | Top Sessions |
| Lock information | ロック待ち発生のクエリと待機時間。log_lock_waits = on が必要。 |
Lock Statistics |
| Temporary file statistics | 一時ファイルの生成状況(サイズ・回数)。log_temp_files = 0 が必要。 |
Sort / Hash Work Area |
| Checkpoint statistics | チェックポイントの実行頻度・所要時間。log_checkpoints = on が必要。 |
— |
| Autovacuum / Autoanalyze statistics | 自動バキューム・自動アナライズの実行状況とテーブル別集計。 | — |
| Connection errors | 接続失敗・認証エラーの集計。 | — |
💡 pgBadger レポートは Oracle AWR HTML レポートに最も近い
pgBadger の HTML レポートは、グラフ・テーブル・クエリ一覧を含むインタラクティブなレポートで、 Oracle AWR の HTML レポートに機能的に最も近い PostgreSQL 用ツールです。 定期的に生成して Web サーバーで公開することで、継続的な性能モニタリングが可能です。
pgBadger の HTML レポートは、グラフ・テーブル・クエリ一覧を含むインタラクティブなレポートで、 Oracle AWR の HTML レポートに機能的に最も近い PostgreSQL 用ツールです。 定期的に生成して Web サーバーで公開することで、継続的な性能モニタリングが可能です。
4. pgBadger の差分レポートと定期実行
#!/bin/bash
# /usr/local/bin/pgbadger-daily.sh
LOGDIR="/var/log/postgresql"
REPORTDIR="/var/www/html/pgbadger"
DATE=$(date +%Y-%m-%d)
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
mkdir -p "$REPORTDIR/$DATE"
# 差分(増分)モードで日次レポートを生成
pgbadger \
--incremental \
--outdir "$REPORTDIR" \
-j 4 \
"$LOGDIR/postgresql-$YESTERDAY.log" \
"$LOGDIR/postgresql-$DATE.log"
echo "pgBadger report generated: $REPORTDIR/index.html"
0 6 * * * postgres /usr/local/bin/pgbadger-daily.sh >> /var/log/pgbadger-cron.log 2>&1
5. pg_activity のインストールと起動
pg_activity は top コマンドに似たターミナルベースの
リアルタイム PostgreSQL 監視ツールです。現在実行中のクエリ・待機状態・ブロッキング関係を
対話的に確認できます。
# pip でインストール
pip install pg_activity
# または OS パッケージマネージャ
sudo apt install pg-activity # Debian/Ubuntu
sudo dnf install pg_activity # RHEL/Rocky
# 起動(ローカル接続)
pg_activity
# リモート接続
pg_activity -h 192.168.1.100 -p 5432 -U postgres -d mydb
# 更新間隔を変更(デフォルト:2秒)
pg_activity --interval 5
# クエリの最大表示文字数
pg_activity --query-length 200
# CPU / メモリ情報を含める(psutil が必要)
pg_activity --no-inst
| キー操作 | 動作 |
|---|---|
| r | 応答時間(duration)でソート |
| c | CPU 使用率でソート |
| m | メモリ使用率でソート |
| R | 読み取り I/O でソート |
| W | 書き込み I/O でソート |
| t | Waiting タブ(ロック待ちセッション)に切り替え |
| b | Blocking タブ(ブロッキングセッション)に切り替え |
| k | 選択したバックエンドを終了(pg_terminate_backend) |
| q | pg_activity を終了 |
| Space | 画面を手動更新 |
| +/- | 更新間隔を増減(デフォルト 2 秒) |
6. pg_activity 画面のセクション定義
セクション定義: pg_activity Running タブ
pg_activity 3.6.0 - https://github.com/dalibo/pg_activity
PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc 11.4.0
HOST: localhost:5432 - USER: postgres - DB: mydb Ref.: 2s
RUNNING QUERIES
PID USER DATABASE APP CLIENT WAIT CPU% MEM% READ/s WRITE/s TIME Query
12345 appuser mydb webapp 10.0.0.1 N 2.5% 0.8% 0 B 0 B 00:00:02 SELECT u.user_id, u.name, COUNT(o.ord
23456 appuser mydb webapp 10.0.0.2 N 0.1% 0.3% 0 B 0 B 00:00:00 INSERT INTO log_entries (event_type,
34567 postgres mydb psql 127.0.0.1 Y 0.0% 0.1% 0 B 0 B 00:00:05 VACUUM ANALYZE users
DATABASE STATISTICS
NAME TPS SIZE CACHE HIT AUTOVACUUM
mydb 145 4.5 GB 98.7% N
ヘッダーセクション
| フィールド | 説明 | Oracle Enterprise Manager 対応 |
|---|---|---|
| HOST / USER / DB | 接続先ホスト・ユーザー・データベース名。 | Target Database |
| Ref.: | 画面更新間隔(秒)。 | — |
RUNNING QUERIES セクション
| 列名 | 説明 | Oracle AWR 対応 |
|---|---|---|
| PID | バックエンドプロセス ID(pg_stat_activity.pid)。 | SID |
| USER | 接続ユーザー名。 | Username |
| DATABASE | 接続データベース名。 | — |
| APP | アプリケーション名(application_name)。 | Program |
| CLIENT | クライアントの IP アドレスまたはホスト名。 | Machine |
| WAIT | 待機中かどうか(Y/N)。Y の場合は wait_event_type / wait_event を確認。 | Wait Class / Wait Event |
| CPU% | このプロセスの CPU 使用率(%)。高い場合は CPU バウンドなクエリ。 | — |
| MEM% | このプロセスのメモリ使用率(%)。 | — |
| READ/s | このプロセスのディスク読み取りスループット(バイト/秒)。 | Physical Reads |
| WRITE/s | このプロセスのディスク書き込みスループット(バイト/秒)。 | Physical Writes |
| TIME | クエリの現在の経過時間(HH:MM:SS)。長い場合は要調査。 | Elapsed Time |
| Query | 実行中のクエリテキストの先頭部分(--query-length オプションで表示文字数変更可)。 |
SQL_TEXT |
DATABASE STATISTICS セクション
| 列名 | 説明 | Oracle AWR 対応 |
|---|---|---|
| TPS | 現在のトランザクション毎秒(コミット + ロールバック / 更新間隔)。 | Transactions / sec |
| SIZE | データベースの合計サイズ。 | — |
| CACHE HIT | 共有バッファのキャッシュヒット率(%)。pg_stat_database の blks_hit / (blks_hit + blks_read)。 | Buffer Cache Hit Ratio |
| AUTOVACUUM | 現在自動バキュームが実行中かどうか(Y/N)。 | — |
✅ Waiting タブ・Blocking タブの活用
t キーで Waiting タブに切り替えると、現在ロック待ちになっているセッションを一覧表示できます。
b キーで Blocking タブに切り替えると、他のセッションをブロックしているセッションを確認できます。
Oracle の「Waiting Sessions / Blocking Sessions」に相当する、ロック問題の即時診断に使います。