導入
PostgreSQLの運用において、最も基本的かつ重要な設定ファイルが「postgresql.conf」です。このファイルには、メモリの割り当て、接続数、ログ出力形式など、データベースの性能と安定性を左右するパラメータが詰まっています。しかし、誤った設定はデータベースの起動不可や重大なパフォーマンス低下を招きます。本記事では、DBAの視点からpostgresql.confを安全かつ効率的に管理する手法を解説します。
基礎知識
postgresql.confは、PostgreSQLのデータディレクトリ(通常は/var/lib/pgsql/dataなど)に配置されたテキストファイルです。
パラメータ名 = 設定値 という形式で記述され、先頭に「#」がある行はコメントとみなされます。重要なポイントは、設定変更後に「再起動が必要なパラメータ」と「設定リロードだけで反映されるパラメータ」が混在している点です。設定ファイル内のコメントに「(change requires restart)」とある場合は注意が必要です。
実装/解決策
現場での運用では、直接ファイルを編集するのではなく、以下の手順を推奨します。
1. バックアップの作成: 編集前に必ず `cp postgresql.conf postgresql.conf.bak` を実行してください。
2. 構文チェック: 編集後、PostgreSQLを再起動する前に、以下のコマンドで設定ファイルに誤りがないか確認してください。
`postgres -D /path/to/data -C config_file` (または `pg_ctl test`)
3. 設定の反映: 再起動が不要な設定の場合は、以下のSQLを実行することで、サービスを止めずに反映可能です。
`SELECT pg_reload_conf();`
サンプルプログラム
以下は、パフォーマンス向上と運用改善のために頻繁に変更される典型的な設定例です。設定ファイル(postgresql.conf)の末尾、あるいは適切なセクションに追記してください。
— DBA推奨設定例 —
接続許可をローカル以外にも広げる(セキュリティ要件に応じて変更)
listen_addresses = ”
メモリ設定(共有バッファは全メモリの25%程度が目安)
shared_buffers = 2GB
作業用メモリ(複雑なソートや結合を行う際に影響)
work_mem = 16MB
ログ出力設定(エラー詳細を記録し、トラブルシューティングを容易にする)
log_min_duration_statement = 500ms # 500ms以上かかるクエリをログ出力
log_line_prefix = ‘%t [%p]: [%l-1] user=%u,db=%d ‘ # ログのフォーマット定義
接続数上限(アプリのコネクションプール数に合わせて調整)
max_connections = 200 # 再起動が必要な設定です
応用・注意点
現場でよくある失敗は、設定値の単位(kB, MB, GB, ms, s, minなど)を間違えることです。PostgreSQLは柔軟な単位を受け付けますが、意図しない単位で設定すると想定外のメモリ消費を引き起こすことがあります。
また、postgresql.confを直接触らずに「include_dir」機能を使うのも高度な管理術です。例えば「conf.d」ディレクトリを作成し、目的別にファイルを分ける(例: tuning.conf, logging.conf)ことで、設定の可読性が大幅に向上し、本番環境でのミスを減らすことができます。設定を変更する際は、必ず変更した日付と理由をファイル内にコメントとして残す習慣をつけておきましょう。

コメント