PostgreSQL > 設定による性能チューニング

更新日 2013-01-12
広告
postgresql.confの設定により、性能向上する方法を紹介します。以下、PostgerSQL Conference 2009 Japanの発表資料 'PostgreSQLのチューニング技法' を参考にしました。

shared_buffers

ディスクから読み込んだデータをキャッシュするために使用するメモリ量を指定します。マシンに搭載されているメモリの 20% 程度に設定します。

Linuxの場合、shared_bufferを増やすとカーネルの shmmax の設定値を超える場合があります。shmmax (/proc/sys/kernel/shmmax)を shared_buffer以上に設定しておかないと、PostgreSQLは起動しません。また、shmallの値は、shmmax/shmnmi (shmmaxをshmnmiで割った値)以上に設定しておく必要があります。通常、shmnmi は 4096 なので、shmmax を 4096 で割った値が shmall より大きい場合は、PostgreSQLは起動しません(shmmaxの設定についてはこちら)。

shmmaxの値を、shared_bufferの値に設定しても、PostgreSQLの起動に失敗する場合もあります。この場合は、PostgreSQL以外のプロセスが共有メモリを使用している可能性があります。共有メモりの使用状況は "ipcs -m" で見れます。当然、共有メモリを使用する全プロセスの必要分を、shmmaxに設定しないといけません。

checkpoint_segments

チェックポイントの実施間隔を調整する値です。 ワークロードが参照メインなら16、更新メインなら32から64あたりに設定します。

checkpoint_completion_target

チェックポイント処理の速度を調整する値です。値を大きくするほど、処理は速くなりますが、その間のI/O負荷は高くなります。ワークロードが参照メインならデフォルトのまま、更新メインなら 0.6から0.9 あたりに設定します。

maintenance_work_mem

vaccum処理(不要なレコードのチェックや掃除の処理)に使用するメモリ量です。例えば、vaccum実施間隔の間に、2割のレコードが更新される場合、(テーブルの行数 * 0.2 * 6) の値を設定します。不要なレコードの情報を格納するのに必要なメモリが 6byte なので、6をかけています。

work_mem

ソートやハッシュに必要となるメモリです。PostgreSQLに対する接続ごとに、work_memで設定した値だけメモリを消費可能となるため、メモリ枯渇に注意してください。

wal_buffers

Write Ahead Log (WAL)用のバッファに使用するメモリ量です。値が小さいと、データの更新処理の速度が低下します。少なくとも4MBは設定します。

effective_cache_size

インデックスの格納に使えるメモリ量です。マシンに搭載されているメモリの 50% 程度に設定します。インデックスがメモリ上にのりきれば、ディスクアクセスが減る/効率化されます。

PostgreSQLが消費するメモリ量

少なくとも、以下の式で計算されるメモリ量が、PostgreSQLにより消費されると想定できます。
 メモリ量 = work_mem * max_connections + shared_buffers
したがって、物理メモリの値が、この値以下である場合は、メモリが足りなくなる可能性があります。
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system