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

问题描述 投票:0回答:3

在 AWS-RDS 上拥有 postgres 数据库,

Swap Usage
不断上升。

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

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

准确地说,我有一个

db.t2.micro
-实例和目前 5 个表中的 ~30/100 GB 数据 - 通用 SSD。使用默认的 postgresql.conf。

交换图如下所示:

交换使用警告:

postgresql amazon-web-services memory-management amazon-rds
3个回答
11
投票

嗯,看来您的查询使用的内存量超过了可用内存量。因此,您应该查看查询执行计划并找出最大负载。该查询超出了 postgresql 的可用内存。通常过多的连接(即错误的数据库结构,如果适用,最好非规范化),或大量嵌套查询,或带有 IN 子句的查询 - 这些都是典型的嫌疑对象。我猜亚马逊为 postgresql.conf 提供了尽可能多的内容,并且这些默认值对于这个小机器来说非常好。

但是,除非您的交换大小不超过您的可用内存并且您位于 SSD 上,否则不会有太大的危害


3
投票

检查

select * from pg_stat_activity;

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


0
投票

显然你的内存不足了。 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。

© www.soinside.com 2019 - 2024. All rights reserved.