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 まで。