我读过几篇文章(包括 Postgres 文档)建议将 shared_buffer 的配置值设置为总物理内存的 25%。
以我的 4 GB 内存为例...如果我理解正确,当 postgres 启动时,它将从操作系统请求 ~1 GB 的物理内存。它将用于缓冲目的。因此,当我查看像“top”这样的实用程序时,我看到 postgres 进程的大小/RES 约为 1GB。
所以我的问题是 - 当我与 Postgres 建立 POOLED 连接时会发生什么?即一个 Tomcat 服务器保持 N 个打开的空闲连接到 postgres?我可以看到有 N 个 postgress 进程在后台等待来自 Tomcat 的请求。每个进程大小相同(~1Gb)。我想它们是原始过程的分支。那么这是否意味着整个 Postgres 占用了 N*1GB 的内存??把 shared_buffer 弄这么大不是一件坏事吗?
不,它仍然只有 1GB 的总内存。
缓冲区被分配为共享内存,它只分配一次,但在所有服务器进程之间共享。
它基本上是 top 命令的内存显示中的一个“错误”,它只是报告每个进程的共享内存(只存在一次)。