Postgres为什么交换使用会增长?如何减少它? - AWS RDS

时间:2017-01-26 15:32:12

标签: postgresql amazon-web-services memory-management swap amazon-rds

在AWS-RDS上拥有postgres数据库Swap Usage不断上升。

为什么会上升?我尝试重新启动,但它没有下沉。 AWS写道,高交换使用率是<#34; 表示性能问题&#34;

我正在向此数据库写入数据。 CPU和内存看起来很健康: enter image description here

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

交换图如下所示:

enter image description here

交换使用警告:

enter image description here

3 个答案:

答案 0 :(得分:4)

好吧您的查询似乎使用的是超出可用内存量的内存。因此,您应该查看查询执行计划并找出最大负载。该查询超出了postgresql可用的内存。通常过多的连接(即错误的数据库结构,如果适用,这将是更好的非经规范化),或许多嵌套查询,或带有IN子句的查询 - 这些都是典型的嫌疑人。我想amazon尽可能地为postgresql.conf提供了这些微小机器的默认值。

但是再一次,除非你的交换大小没有超过你的可用内存并且你在SSD上 - 它不会有那么大的伤害

答案 1 :(得分:1)

检查

select * from pg_stat_activity;

并查看哪个流程需要很长时间以及处理多少进程,请尝试根据需要更改RDS数据库参数。

答案 2 :(得分:0)

显然你的内存不足了。 db.t2.micro只有1GB的RAM。您应该查看htop输出以查看哪些进程占用了大部分内存并尝试优化内存使用情况。还有一个很好的实用程序叫做pgtop(http://ptop.projects.pgfoundry.org/),它显示当前查询,读取的行数等。您可以使用它来实时查看您的postgress状态。顺便说一句,如果你不能安装pgtop,你可以从posgres内部工具获得相同的信息 - 查看postgres stats collector https://www.postgresql.org/docs/9.6/static/monitoring-stats.html的文档

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