我们正在使用实例类型为 db.m4.2xlarge 的 rds(postgres)。
通常大多数时候连接数为 8-10。但有时当连接数增加到 100-200 时,数据库会变得无响应。我们在连接数或读取连接数突然激增的情况下多次看到数据库无响应(因此即使在连接数从 10 增加到 100 的情况下也是如此)。
正在执行的查询最多需要 2 秒才能完成。
我的应用程序服务器在 django/python 堆栈上运行(使用 Gunicorn)。当数据库服务器响应时间增加时,这些服务器的延迟也会增加。
我们应该对 postgres rds 的配置做任何更改来提高性能(当前大多数设置都是默认的)?
答案1
我遇到了同样的问题。postgresql 是在 AWS RDS 上设置的,即使增加了实例,它的 CPU 利用率仍然达到 100%。我使用显示的方法进行了调试这里其中一种方法对我很有效。
我检查了运行时间最长的查询,发现某些查询卡住了,并且已经运行了 3-4 个小时。要检查查询运行了多长时间,请运行以下命令:
SELECT max(now() - xact_start) FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active');
如果超过一小时,那么这就是问题所在。终止长时间运行的连接并从应用程序端限制连接的最大使用期限。
答案2
我敢打赌你有一个查询特别慢。当这个查询运行时,连接会堆积在它后面。我会先找出有问题的查询,然后找出如何修复它。