2026年6月16日

2026年6月16日

PostgreSQLのpg_stat_statementsでクエリを分析する方法

はじめに

PostgreSQLはパフォーマンスの観点からSQLクエリの最適化が重要です。pg_stat_statementsモジュールを使用することで、SQLクエリの実行時間を分析し、パフォーマンスが低下している特定のクエリを見つけることができます。この記事では、pg_stat_statementsを有効にし、そのデータを利用して効率的なSQLチューニングを行う方法を解説します。

症状・背景

  • SQLパフォーマンスが低下している場合
  • ログから特定のSQLクエリの実行時間を確認したい場合
  • クエリ最適化のために詳細なクエリ分析が必要な場合

手順・設定方法

ステップ1: pg_stat_statementsモジュールを有効にする

# PostgreSQLのコンフィギュレーションファイル(通常はpostgresql.conf)を開く
sudo nano /etc/postgresql/<バージョン>/main/postgresql.conf

# pg_stat_statementsモジュールの設定を追加または変更する
shared_preload_libraries = 'pg_stat_statements'

ステップ2: pg_stat_statementsパラメータを設定

# PostgreSQLのコンフィギュレーションファイルを開く
sudo nano /etc/postgresql/<バージョン>/main/pg_stat_statements.conf

# 必要なパラメータを設定する
max_samples = 1000         # 統計を記録する最大クエリ数
default_sampling_rate = 25 # クエリのサンプリング率(%)

ステップ3: モジュールを再起動して有効にする

# PostgreSQLサービスを停止し、再度起動する
sudo systemctl stop postgresql
sudo systemctl start postgresql

ステップ4: pg_stat_statementsを使用したクエリ分析

# 実行されたSQLクエリの統計情報を表示する
\x on        # 並列出力モードを有効にする(可視化のために)
SELECT * FROM pg_stat_statements;

# 特定のユーザーによるSQLクエリの統計情報を見る
SELECT * FROM pg_stat_statements WHERE userid = (SELECT usesysid FROM pg_user WHERE usename = 'yourusername');

注意事項

  • pg_stat_statementsはメモリ消費量が大きいので、適切なパラメータを設定する
  • クエリの実行に影響を与える可能性があるので、プロダクション環境では慎重に有効にする
  • 定期的に統計情報をクリアすることでリソースを節約できる

まとめ

1. pg_stat_statementsモジュールのインストールと設定:

- PostgreSQLのコンフィギュレーションファイルでモジュールを有効にし、必要に応じてパラメータを調整します。

2. モジュールの再起動:

- モジュールを再度起動することで設定が反映されます。

3. クエリ分析:

- pg_stat_statementsを使用して実行されたSQLクエリの統計情報を確認し、パフォーマンス改善に役立てます。

関連記事:

  • [PostgreSQLの基本設定と最適化]
  • [SQLチューニングの実践的な手法]

お気軽にご相談ください

お見積りへ お問い合わせへ