AWS RDS-Postgres高CPU利用率

3
尝试将生产环境从本地Postgres环境(托管在AWS EC2上)迁移到RDS Postgres(9.4.4),但失败了。与本地Postgres实例相比,RDS Postgres实例的CPU利用率急剧增加。
我的环境详细信息如下:
1.主服务器:db.m3.2xlarge实例 2.从服务器1:db.m3.2xlarge实例 3.从服务器2:db.m3.2xlarge实例 4.从服务器3:db.m3.xlarge实例 5.从服务器4:db.m3.xlarge实例
[注意:所有从服务器均处于一级复制状态]
我已将主服务器配置为仅接收写请求,并且该实例完好无损。写入计数为每秒50到80次,CPU利用率约为20到30%。
但是除此之外,我的所有从服务器表现都非常糟糕。从服务器仅配置为接收读取请求,我认为所有正在发生的写入都是由于复制引起的。
这些盒子上的预配IOPS为1000,平均每个从服务器有5到7个读取请求,CPU利用率为60%。而在本地Postgres中,我们可以在此流量范围内保持在30%以内。
无法弄清楚RDS设置出了什么问题,AWS支持也无法提供良好的线索。
是否有人遇到过RDS Postgres类似的问题?
2个回答

11

有很多因素可以最大化PostgreSQL的CPU利用率,例如:

  • 可用磁盘空间
  • CPU使用情况
  • I/O使用情况等等

我几天前也遇到了相同的问题。对我来说,原因是某些事务卡住并且运行时间很长。因此CPU利用率增加了。通过运行一些postgreSql监控命令,我了解到了这一点:

SELECT max(now() - xact_start) FROM pg_stat_activity
                           WHERE state IN ('idle in transaction', 'active');

这个命令显示事务开始运行的时间。这个时间不应该超过一个小时。所以杀死那些长时间运行或卡在任何一点上的事务对我有用。我遵循这篇文章来监控和解决我的问题。文章包含许多有用的命令来监视这种情况。


0
我建议您增加work_mem的值,因为它可能太低了,并进行正常的查询优化研究,以查看是否使用了没有正确索引的查询。

Matt,我的本地Postgres设置运行得非常好。导入到RDS Postgres的转储文件完全相同(包括所有索引)。我正在努力弄清楚为什么RDS Postgres的行为如此不同。 - Karthic Somalinga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接