在 AWS-RDS 上拥有 postgres 数据库,
Swap Usage
不断上升。
为什么会上涨?我尝试重新启动,但它没有下沉。 AWS 写道,高交换使用率“表明存在性能问题”
我正在向该数据库写入数据。 CPU 和内存看起来确实很健康:
准确地说,我有一个
db.t2.micro
-实例和目前 5 个表中的 ~30/100 GB 数据 - 通用 SSD。使用默认的 postgresql.conf。
交换图如下所示:
交换使用警告:
嗯,看来您的查询使用的内存量超过了可用内存量。因此,您应该查看查询执行计划并找出最大负载。该查询超出了 postgresql 的可用内存。通常过多的连接(即错误的数据库结构,如果适用,最好非规范化),或大量嵌套查询,或带有 IN 子句的查询 - 这些都是典型的嫌疑对象。我猜亚马逊为 postgresql.conf 提供了尽可能多的内容,并且这些默认值对于这个小机器来说非常好。
但是,除非您的交换大小不超过您的可用内存并且您位于 SSD 上,否则不会有太大的危害
检查
select * from pg_stat_activity;
并查看哪个进程耗时较长以及有多少进程处于休眠状态,尝试根据您的需要更改 RDS DB 参数。
显然你的内存不足了。 db.t2.micro 只有 1GB RAM。您应该查看 htop 输出以查看哪些进程占用了大部分内存并尝试优化内存使用。还有一个名为 pgtop 的实用程序(http://ptop.projects.pgfoundry.org/),它显示当前查询、读取的行数等。您可以使用它来实时查看 postgress 状态。顺便说一句,如果你无法安装 pgtop,你可以从 posgres 内部工具获取相同的信息 - 查看 postgres 统计收集器的文档 https://www.postgresql.org/docs/9.6/static/monitoring-stats.html
实际上很难说问题到底是什么,但 db.t2.micro 是一个非常有限的实例。您应该考虑采用更大的实例,特别是如果您在生产中使用 postgres。