PostgreSQLの心臓部をいじる前に:`postgresql.conf`との正しい付き合い方
現場でバリバリやってると、「とりあえずネットで見つけた設定をコピペして反映させたけど、本当に効いてるのか確信が持てない……」なんて経験、一度はあるよね。
PostgreSQLのチューニングにおいて、`postgresql.conf`はまさに心臓部。ここを理解せずにパラメータをいじるのは、目隠しでF1マシンを運転するようなものだ。今回は、ただのドキュメントの写しじゃなくて、実務でトラブルを避けるための「設定ファイルの作法」について、少し深掘りしてみよう。
—
1. 「全部入り」は卒業しよう:includeディレクティブの活用
初心者の頃は、何でもかんでも一つの`postgresql.conf`に書き込みがちだ。でも、項目が増えてくると、どこに何を書いたか見失うし、設定ミスで再起動に失敗した時の絶望感といったら……。
PostgreSQLには`include`という素晴らしい機能がある。これを使えば、設定を役割ごとに分割できるんだ。
おすすめのディレクトリ構成例:
/var/lib/pgsql/data/
├── postgresql.conf # メインの設定(最低限のみ)
├── conf.d/ # 設定分割用ディレクトリ
│ ├── memory.conf # shared_buffersなどのメモリ関連
│ ├── tuning.conf # autovacuumなどのチューニング設定
│ └── network.conf # listen_addressesなどの接続系
メインの`postgresql.conf`の末尾に、こう書いておくだけでいい。
include_dir = ‘conf.d’
これだけで、設定の見通しが劇的に良くなる。「メモリ周りをいじりたいときは`memory.conf`を見る」というルールができるだけで、障害調査の時間は半分以下になるよ。
—
2. 設定の反映タイミング:SIGHUPと再起動の使い分け
設定を変えた後、「あれ?これって再起動が必要なやつだっけ?」と迷うことはないかな。
実は、PostgreSQLの設定パラメータには大きく分けて2種類ある。
- SIGHUPで反映できるもの: 多くのチューニング項目(work_mem, effective_cache_sizeなど)はこれ。プロセスを再起動しなくても、設定を読み直してくれる。
- 再起動が必須のもの: `shared_buffers`や`max_connections`など、サーバー起動時にメモリ領域を確保するような根幹の設定。
実践的な反映テクニック
コマンドラインで反映させる時は、`pg_reload_conf()`を使うのがスマートだ。
psqlから直接呼び出すのが一番確実
psql -c “SELECT pg_reload_conf();”
もし設定ミスをしていても、サーバー自体は落ちない。ログ(`log/postgresql.log`)にエラーが吐き出されるだけだから、再起動というギャンブルをせずに済む。
先輩からのアドバイス:
「設定を反映したら、必ず`pg_settings`ビューで確認するクセをつけよう。」
— 現在反映されている値と、設定ファイルの値を確認する
SELECT name, setting, boot_val, reset_val
FROM pg_settings
WHERE name = ‘work_mem’;
`reset_val`が実際に今動いている値だ。ここを確認するだけで、「設定したはずなのに反映されてない!」という悲劇を防げる。
—
3. 注意点:順序と優先順位
最後に一つだけ、地味だけど重要な罠を教えるよ。`postgresql.conf`(や`include`ファイル)では、同じパラメータが複数回定義されていた場合、一番下の設定が優先される。
例えば、こんな感じだ。
conf.d/tuning.conf
work_mem = 4MB
postgresql.conf の末尾
work_mem = 16MB
この場合、`work_mem`は16MBになる。設定ファイルが分割されていると、うっかり複数の場所で同じパラメータを定義してしまい、「どっちが効いてるんだ?」と混乱する原因になる。
鉄則:
「パラメータは定義する場所を一つに絞る」。
もし設定を上書きしたいときは、コメントアウトして履歴を残すか、一つのファイルに集約する。運用ルールを自分たちで決めておくことが、一番のパフォーマンスチューニングなんだ。
—
まとめ
- `include_dir`を使ってファイルを分割し、見通しを良くする。
- 基本は`pg_reload_conf()`で反映。再起動は最後の手段。
- `pg_settings`で現在の値を正しく確認する。
設定ファイルは、ただの「設定の羅列」じゃなくて、そのシステムの「設計思想そのもの」だと思ってほしい。整理された設定ファイルは、トラブルが起きた時に君の背中を守ってくれる最強の防具になるはずだよ。
さあ、自信を持ってチューニングを始めよう!何か詰まったら、またいつでも聞いてくれ。
コメント