[default_statistic_target]
PostgreSQLがクエリーを実行する際に参考にする統計情報をどれぐらい細かく集めるかを指定するパラメーターです。統計情報が十分に取れていないならば増やすことでクエリーの実行性能が上がるかもしれない。
設定の目安としては、100以上の値に設定するべきだと本に書いてあった。理由は、性能が変わる閾値がハードコーディングされているかららしい。
統計情報は、ANALYZEを実行するかautovacuumの実行時に自動的に収集されます。したがって数値を大きくしすぎるとautovacuumの処理が重くなる。
[checkpoint_segment]
PostgreSQLではデータベースへの更新履歴を、WALログという特殊なファイルに書き込みを保持しWALログが一定の数になったらDB本体へ更新を確定させるチェックポイントという処理を行っている。
このチェックポイントの処理は重い処理らしくチェックポイントが頻発するとディスク書き込みの負荷でパフォーマンスが低下する。
PostgreSQL8.2以前ではチェックポイントの処理はできるだけ速く処理するように作られていたのでチェックポイントが発生した際にI/O負荷が高くなる傾向があった。
PostgreSQL8.3以降ではチェックポイントとチェックポイント間で分散して行うようになりシステム全体への影響が少なくなった。
checkpoint_segmentは、チェックポイントとチェックポイントの間で、何個のWALログを保持するかというパラメータです。増やすことでチェックポイントの頻度を減らしパフォーマンスの低下を減らすことができる。
しかし大きな値にするとサーバーがクラッシュすると、最後のチェックポイントの時点からのWALログのデータからリカバリーの処理が行われるため復帰までの時間がかかるようになる。16~32ぐらいまでの間で設定をするべきらしい。
[maintenance_work_mem]
VACUUM, CREATE INDEXなどを行う際に使用されるメモリ領域です。最近のメモリーをGB単位で積んでいるサーバーでは搭載メモリ量の5%を目安に設定する。
PostgreSQLのチューニング その1
PostgreSQLのチューニング その3
[参考書籍]
英語版だが、解説がとても分かりやすい本、PostgreSQL版の実践ハイパフォーマンスMySQLといったとこだろうか。さすがPostgreSQLの開発者が書いているだけはある。