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チューニングの実践的な手法]