Postgres 为什么交换使用量在增长?如何减少呢? -AWS RDS

Postgres why is swap-usage growing? How to reduce it? - AWS RDS

在 AWS-RDS 上有一个 postgres 数据库 Swap Usage 在不断增加。

为什么会上涨?我尝试重新启动,但它没有下沉。 AWS 写道,高交换使用率“表明性能问题

我正在向这个数据库写入数据。 CPU 和内存看起来确实很健康:

准确地说我有一个
db.t2.micro-实例,目前约 30/100 GB 数据在 5 个表中 - 通用 SSD。使用默认 postgresql.conf.

交换图如下所示:

交换使用警告:

显然你 运行 内存不足。 db.t2.micro 只有 1GB 内存。您应该查看 htop 输出以了解哪些进程占用了大部分内存并尝试优化内存使用。还有一个很好的实用程序叫做 pgtop (http://ptop.projects.pgfoundry.org/) which shows current queries, number of rows read, etc. You can use it to view your postgress state in realtime. By the way, if you cannot install pgtop you can get just the same information from posgres internal tools - check out documentation of postgres stats collector https://www.postgresql.org/docs/9.6/static/monitoring-stats.html

其实很难说到底是什么问题,但db.t2.micro是一个非常有限的实例。您应该考虑采用更大的实例,特别是如果您在生产中使用 postgres。

检查

select * from pg_stat_activity;

并查看哪个进程耗时长以及有多少进程处于休眠状态,请尝试根据需要更改 RDS DB 参数。

好吧,看来您的查询使用的内存量超出了您的可用内存量。所以你应该看看你的查询执行计划并找出最大的负载。该查询超出了 postgresql 可用的内存。通常 over-much 加入(即糟糕的数据库结构,如果适用的话最好非武装化),或大量嵌套查询,或带有 IN 子句的查询 - 这些都是典型的嫌疑犯。我想亚马逊为 postgresql.conf 提供了尽可能多的服务,这些默认值对这台小机器来说相当不错。

但是再次重申,除非您的交换大小不超过可用内存并且您在 SSD 上 - 它不会有太大危害