4.postgresql.conf(2)
●共有バッファ(shared_buffers)
共有バッファは、テーブルのデータをキャッシュするために使用されます。キャッシュは、複数のバックエンドプロセスの間で共有する必要があるため、共有メモリ(shared
memory)という、特別なメモリ領域に保持されます。設定shared_buffersでは、この共有メモリのサイズを設定することができます。
共有バッファ上にテーブルのデータがキャッシュされると、次回同じデータを必要とする参照系クエリが発行された場合に、ディスクからデータを読むのではなく、共有メモリ上のデータを参照するようになります。共有メモリからのデータ読み出し速度はディスクと比較して非常に高速です。つまり、より高速に処理を完了させることができるのです。
共有バッファのサイズを大きくしておくと、必要なデータが共有バッファ上に存在する確率が高くなります。つまり、システム全体として、速度改善の可能性が向上することになります。
共有バッファのサイズは可能な限り大きくとるべきです。しかし、物理メモリの量は無限ではありません。そこで、どの程度の領域を実際に確保するかを検討することになります。「他のソフトウェアのメモリ使用に影響を及ぼさない最大値」というのが理想的なサイズです。つまり、スワップが発生しない状態を維持できる最大サイズです。このサイズがどの程度かはケースバイケースですが、空きメモリのサイズを一定期間監視すれば、どの程度のメモリの割り当てが可能か推測することができます。
逆のアプローチとして、最適なパフォーマンスを得るための必要最小限のメモリ量から割り当てるメモリの量を考えるという方法もあります。最適なパフォーマンスを得るためには、「必要なテーブルが全て収まるサイズ」のメモリ量が必要です。前項「活動状況の監視(stats_*)」を行うことによって、現状の設定で足りているかどうかを知ることができます。
なお、設定値に 8192 Byte を掛けた数が確保されるメモリ量の概算になります(実際にはもう少し多くなります)。また、max_connectionsの値を2倍した値以上の数値を設定しなければなりません。
OSの設定として、OS全体で確保できる共有メモリサイズには上限があります。共有メモリはPostgreSQL以外のソフトウェアも使用するので、システム全体の共有メモリ使用量が上限を超えないようにしなければなりません。現在の共有メモリ使用状況を確認するためには、次のコマンドを実行します。
共有メモリの上限を変更することもできますが、OS毎に設定方法は異なります。例えばLinuxでは、/proc/sys/kernel/shmmax
というファイルで最大サイズを管理しています。このファイルの内容を次のようにして書き換えれば、共有メモリ最大サイズを133554432バイトに変更できます。
echo 133554432 > /proc/sys/kernel/shmmax |
●ソートメモリ(sort_mem)
ソートを行うための作業領域のサイズを設定します。単位は KByte です。ソート作業で必要な領域がここでの設定値を超えると、一時ファイルへの書き出しが行われ、パフォーマンスに悪影響を及ぼします。
ソートメモリは下記の処理中に使用されます。
- ORDER BY
- Merge Join
- CREATE INDEX
ソートメモリは、共有メモリではなく、通常のメモリ領域に確保されます。また、各 postgres プロセス毎に保持され、一つのソートに対して一つの領域が割り当てられます。従って、ここでの設定値の数倍のメモリが使われることになりますので、大きすぎる値を設定することはスワップの発生を誘発し、パフォーマンスの低下を引き起こします。
>>次のページへ
|