我在 94 GB 内存服务器上安装了 Postgres 9.3,120GB 数据库,shared_buffers=1GB。Linux 显示我有 88GB 内存可用(没关系,图表非常稳定),但共享缓冲区缓存未命中率约为 10%。
所以我改变了 shared_buffers=16GB 并且我认为可用内存大约是 88G-15GB = 73GB。相反,可用内存在 85GB-77GB 范围内移动,因此共享缓冲区会以某种方式被无缘无故地驱逐。缓存未命中率约为 5%,仍然很糟糕。可用内存图表: 内存消耗
我无权安装 pg_buffercache 扩展来澄清任何缓冲区都是空的。
为什么 Postgress 不使用所有共享内存和驱逐缓冲区有什么想法吗?
UPD。可用内存增长与检查点限制启动的检查点之间存在相关性 - 图表上的所有高峰值都是检查点。尚不清楚为什么 postgress 在检查点保存到磁盘后会释放脏缓冲区