“检查指针进程”在 Postgres 中消耗更多内存。如何控制它?

Posted

技术标签:

【中文标题】“检查指针进程”在 Postgres 中消耗更多内存。如何控制它?【英文标题】:"checkpointer process" is consuming more memory in Postgres. How to control it? 【发布时间】:2018-08-22 13:47:23 【问题描述】:

我们有一个数据库集群“db1_data”。在这个集群下,我们有两个数据库。一个是 db1,另一个是 qovr。我惊讶地看到“检查点进程”正在消耗 8.73GB 的内存(RSS 值为 9158892)。为什么“检查指针进程”会消耗这么多内存,以及如何限制“检查指针进程”内存的使用。

【问题讨论】:

您可能只看到来自shared_buffers 的共享内存。不用担心。此内存会为许多 PostgreSQL 进程显示,尽管它只存在一次。 如果你看到日志,你会发现有几个 postgres 处理器/连接消耗超过 1gb 的内存。 有趣。您如何在日志中看到这一点? ps 将包括父进程分配的共享内存。由于父 postgres 进程为 shared_buffers 分配了共享内存,因此预计 ps 列出的每个子进程都会给出它使用那么多内存的表达式。 【参考方案1】:

我也有类似的情况。我有两个进程分别占用 16GB 的 RAM(postgres:检查点进程和 postgres:写入进程)。我查看了命令的输出

pmap -p PID_OF_PROCESS 

发现最大的内存被“删除”的/dev/zero占用了。

为什么会这样?我没有找到释放内存的解决方案。这是一个测试环境,所以我刚刚重启了PG。

【讨论】:

以上是关于“检查指针进程”在 Postgres 中消耗更多内存。如何控制它?的主要内容,如果未能解决你的问题,请参考以下文章

强调 spring boot 服务时消耗的 GCP Postgres 连接(使用 SQL Cloud 代理)

连接postgres特别消耗cpu资源而引发的PostgreSQL性能优化考虑

连接postgres特别消耗cpu资源而引发的PostgreSQL性能优化考虑

分区表的规划时间在 postgres 11 中需要更多时间

Postgres- pgsql 花费更多时间从超过 15 亿行的表中检索数据

为啥布尔值比字符消耗更多的内存?