PostgreSQLチューニング

デフォルトはあくまでもミニマムな設定であり,サーバーのパワーに余力がある場合は設定をいじる必要があるという.なお,以下のチェックポイントではupdateが頻繁に起こる場合を想定している.またpgbenchという備え付けのベンチマークソフトを使用しているとのこと.

Shared Buffer

デフォルトは1000ページだが,メモリが数Gあるような場合であれば増やしてもよい.Postgresqlがキャッシュをする大きさ.OSの制限に気をつける必要がある.ただし,PostgresqlはOSのファイルシステムを使用しているため,OSファイルのキャッシュも効くので,selectだけではそれほど処理は向上しない.postgresql.confのshared_buffersで調整する

Transaction Log Buffer

トランザクションログバッファに書くためのバッファ.トランザクションが完結する場合(他にも書き込まれる場合はあると思うが)までバッファされる領域.もう少し増やしてもよい.postgresql.confのwal_bufferで調節する.

Writer Process(8.0 later)

Dirty PageをHDDに保存し続けるバックグラウンドプロセス.デフォルト200ms間隔で100pageまで書き込むらしいが,少し多すぎるとのこと.4pageくらいでいいくらいらしい.postgresql.confのbgwriter_delayおよびmaxpagesで設定する

Tablespace(8.0 later)

すべてpg_defaultというテーブルスペースに格納され,さらにトランザクションログも同じ領域に格納されている.もちろん,分けた方がよい.Tableごとに設定が可能

Checkpoint segment数

チェックポイントを発生させるセグメントの数.チェックポイントが発生すると,トランザクションログを切り捨てる代わりに,ダーティーページの反映に行く.この数を増やすとトランザクションログの大きさが増え,チェックポイントの発生回数が減る.トランザクションログが大きくなるので,リカバリに時間が掛かってしまうという点に注意.postgresql.confのcheckoint_segmentsを変更する

ファイルシステムの調整

OSのファイルシステムの更新日付の更新をやめる.atimeをオフにすればよい

OSのディスクキャッシュサイズの想定値を正しく設定する

デフォルトでは8Mになっている.だいたいサーバーのメモリの1/3にする.postgresql.confのeffective_cache_sizeに設定する.実行計画の選択に影響するため正しく設定した方がよい

vaccume

pg_auto_vaccumeという機能もあるので,vaccumeすること