1

我在 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 在检查点保存到磁盘后会释放脏缓冲区

4

1 回答 1

0

在 PostgreSQL 的 32 位版本上,这可能是http://rhaas.blogspot.com/2011/05/sharedbuffers-on-32-bit-systems.html中提到的进程地址空间限制的结果

于 2018-08-07T14:51:01.853 回答