Centos 6 x64(RAM:8 GB)に小さなデータベースPostgreSQL(v9.3)があります。
postgresql.conf
max_connections = 512
shared_buffers = 3000MB
temp_buffers = 8MB
work_mem = 2MB
maintenance_work_mem = 128MB
effective_cache_size = 3000MB
約150の接続で、PostgreSQLは6 GB以上のRAM(もちろん、他のアプリケーションは約200 MBのRAMを使用します)を使用します)、ここに私の情報:
Mem: 7062.945M total, 6892.410M used, 170.535M free, 6644.000k buffers
Swap: 0.000k total, 0.000k used, 0.000k free, 5378.922M cached
なぜPGは多くのRAMを使用するのですか?
PGのキャッシュバッファを削減するにはどうすればよいですか?
PostgreSQLは大量のRAMを使用していません。カーネルはそれをディスクキャッシュに使用しています。
これがまさにあなたが起こしたいことです。ここで修正するものはありません。
"無料" RAMは無駄なRAMです。データベースサーバーにとって最良のことは、できるだけ多くのRAMをディスクキャッシュとして使用することです。
実際、_shared_buffers = 3000MB
_を使用すると、PostgresdoesはRAM( 8 GBのシステムの場合は相対的に言えば)-すべてのRAMでなくても、あなたが考えていたように。そして、「理由」は明らかです。 _shared_buffers
_ の設定で指示したためです。設定は高い(デフォルトは128MB)が、専用DBサーバーの場合、設定はまだ妥当と思われます。 (通常、合計の40%以上RAMは過剰です。)
Postgresはbothシステムキャッシュand独自の共有バッファを使用します。共有バッファはPostgresに対して専用であり、メモリは他のプロセスと共有されません。データの短期バッファリングに使用され、高速処理に不可欠です。システムキャッシュは、キャッシュに何を保持するか、リソースが要求された場合に何をプッシュアウトするかを長期的に処理するために、よりスマートで高速です。 @ Craigの回答 および 見つけたサイト は、システムキャッシュseemsがすべてのRAMを消費する理由を説明しています。これはすべて、Unix/Linux用です。 Windowsの動作は一部の側面で異なり、詳細についてはよくわかりません。
shared_buffers
_の設定方法に関するアドバイスがあります。"PGのキャッシュされたバッファを減らす"(そして"small database"で実際にそれを実行する必要があるかもしれません)_shared_buffers
_と Postgresを再起動します:
このパラメータは、サーバーの起動時にのみ設定できます。