birdPostgreSQL チューニング(2)

PostgreSQL チューニング(2)

その後、Tuning PostgreSQL for performance というページを見つけ、大いに参考になりました。

wal_fsync_method
前に書いた通り、Linux 2.4 に普通の SCSI ディスク、という構成だと fsync が最速なようです。
wal_buffers
ドキュメントを読む限り、今回の場合大きくしてもそれほど効果無いはずです。しかし、ここに超巨大な値 (1Gbytes など) を指定すると一時的 (起動後しばらく) は性能がブーストされるようです。その後ずっと利用していると徐々に性能が劣化し、最終的には小さな値を指定した時と同じくらいの値に落ち着くようです。
shared_buffers
Oracle と違い、shared_buffers はメモリの許す限り大きくすればよい、というわけではないようです。今回の場合、max_connections * 4 くらいの値が最適なようでした。
checkpoint_segments
チェックポイント間隔を長くし過ぎると pause 時間も延びてしまいうまくない、というのは以前書いた通りです。今回はコンスタントな性能を目指すことにして、checkpoint_segment は 1 にしてみました。それにより多少オーバーヘッドは増えて (スループットは低下して) しまいますが、許容範囲内と判断しました。なお、合わせて checkpoint_warning を 0 にしておかないとログに warning が出力され続けて大変なことになります(笑。

他にも、auto commit よりも明示的に commit した方が早い場合があるとか、pg_autovacuum を利用するために stat オプションをいくつか true にすると多少性能が劣化する、などの現象が見られました。

結果的には、何も設定しなかった時と比較すると2倍前後高速化されました。やっぱり RDBMS はチューニングが大事、なんですねぇ…。