Postgresql Postgres为什么交换使用量在增长?如何减少它自动气象站

Postgresql Postgres为什么交换使用量在增长?如何减少它自动气象站,postgresql,amazon-web-services,memory-management,swap,amazon-rds,Postgresql,Amazon Web Services,Memory Management,Swap,Amazon Rds,AWS-RDS上有postgres DB,交换使用量不断上升 为什么会上升?我尝试重新启动,但它没有下沉。AWS写道,高交换使用率“表明存在性能问题” 我正在向这个数据库写入数据。CPU和内存看起来确实很健康: 准确地说,我有一个 db.t2.micro-实例和当前5个表中的~30/100 GB数据-通用SSD。使用默认的postgresql.conf 交换图如下所示: 交换使用警告: 显然,您的内存不足。db.t2.micro只有1GB的RAM。您应该查看htop输出,看看哪些进程占用了大

AWS-RDS上有postgres DB,交换使用量不断上升

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

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

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

交换图如下所示:

交换使用警告:


显然,您的内存不足。db.t2.micro只有1GB的RAM。您应该查看htop输出,看看哪些进程占用了大部分内存,并尝试优化内存使用。还有一个名为pgtop()的实用程序,它显示当前查询、读取的行数等。您可以使用它实时查看postgress状态。顺便说一句,如果你不能安装pgtop,你可以从posgres的内部工具中获得同样的信息——查看postgres stats collector的文档

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

< P>检查

select * from pg_stat_activity;

并查看哪个进程占用的时间长以及有多少进程处于休眠状态,根据需要尝试更改RDS DBparameter。

看来您的查询使用的内存量超过了可用内存量。因此,您应该查看查询执行计划并找出最大负载。该查询超出了postgresql可用的内存。通常过多的连接(即糟糕的数据库结构,如果适用的话,可以更好地进行非语法化),或者大量嵌套查询,或者带有IN子句的查询——这些都是典型的怀疑。我想amazon尽可能多地为postgresql.conf提供了一些默认值,这些默认值对于这台微型机器来说非常好


但是再一次,除非您的交换大小不超过可用内存,并且您的设备位于SSD上,否则如果不知道您的postgresql.conf,它不会有太大的危害,这很难说。通常,当PostgreSQL尝试执行大量内存中的计算时,这是一个具有聚合的复杂查询。然而,13.00MB的交换完全不是问题,尤其是在SSD上,即使它们是通用的。我不想麻烦了。我有378Gb的PostgreSQL操作内存,它不知怎么地使用了368M的交换空间——这对我来说根本不是问题@IlyaDyoshin:谢谢。这对我帮助很大。我确实使用标准的RDS postgresql.conf,如果这有助于判断您的查询使用的内存量是否超过了可用内存量。因此,您应该查看查询执行计划并找出最大负载。该查询超出了postgresql可用的内存。通常过多的连接(即糟糕的数据库结构,如果适用的话,可以更好地进行非语法化),或者大量嵌套查询,或者带有IN子句的查询——这些都是典型的怀疑。我想亚马逊尽可能多地提供了postgresql.conf,这些默认值对于这台微型计算机来说是非常好的。但是再一次,除非您的交换大小不超过可用内存,并且您在SSD上,否则这不会有太大的危害。@IlyaDyoshin:您能写下这个作为答案吗?然后我可以接受它