【PostgreSQL】PostgreSQLのチューニング(設定編)

皆さん、こんにちは。がーしらです。

PostgreSQLを使ってシステム運用してますが、データ量やアクセスが増えると速度の懸念が出てきますよね。そんな時に見直す検討にあげるパラメータを簡潔にまとめました。ご参考にどうぞ。

※あくまで参考値なので、自身の環境にあった設定値を設定してください。

  1. shared_buffers
    データベースが使用する共有メモリバッファの値です。ちなみに増やしすぎても効果はありません。
    〇 デフォルト:128MB
    〇 推奨値:総メモリの25%
    〇 適切に設定すると結構速度変わってきます。まずは設定しておきたい項目

  2. work_mem
    ソートやテーブルのジョインなどのときに使われるメモリ量です。この値を大きくすると、テーブル結合処理などが高速化されます。
    〇 デフォルト:4MB
    〇 推奨値:環境やシステムにもよるが、
    work_mem × max_connnections+α
    の値が消費されるのである程度余裕をもって設定しておき、システムにあった値を調整する。
    〇 適切に設定するとまぁまぁ速度変わってきます。複雑なテーブル構造や並び順での速度低下が発生している場合は見ておきたい項目

  3. effective_cache_size
    PostgreSQL が使用するバッファ領域やディスクキャッシュとして利用可能な大きさの推定値です。この値を大きくするとオプティマイザがインデックスを利用した問合せプランを選択しやすくなります。
    〇 デフォルト:128MB
    〇 推奨値:総メモリの50%
    〇 インデックスにバチッとはまると速度が出る場合に見ておきたいところ。なんとなくで見直すのは辞めたほうが良い項目

  4. maintenance_work_mem
    VACUUM、CREATE INDEX、およびALTER TABLE ADD FOREIGN KEYの様な保守操作で使用されるメモリの最大容量です。work_memよりもかなり多めの値にしても安全で、大きい値を設定することでvacuum処理と、ダンプしたデータベースのリストア性能が向上します。
    〇 デフォルト:64MB
    〇 推奨値:環境やシステムにもよるが、autovacuumがはしると
    maintenance_work_mem × autovacuum_max_workers
    の値が消費されるので大きすぎてもあまりよくない。が、最大でindexの生成に必要なメモリ分しか使用されない説もあり、DB内最大のIndexのサイズぐらいもありかもしれない
    〇 バキュームに時間がかかってる場合に有効だがあまり気にしない場合も多い項目

簡単にですが、PostgreSQLのチューニングでよくある代表的な設定値を紹介しました。設定値は稀に変更するだけで劇的に早くなったり劇的に遅くなったりすることがありますので、まず初めにチューニングとして見直したいところです。
そして、日々の運用・保守で自身が担当する環境にあった値をチューニングして快適なPostgreライフを過ごしていただければと思います。
次はSQL編でお会いしましょう。

コメントを残す

%d人のブロガーが「いいね」をつけました。