Post Rres上的高CPU利用率 - Postgres

时间:2015-11-06 04:21:43

标签: postgresql amazon-web-services amazon-ec2 cpu-usage rds

尝试将我的生产环境从Native Postgres环境(托管在AWS EC2上)迁移到RDS Postgres(9.4.4),但它失败了。与Native Postgres实例相比,RDS Postgres实例的CPU利用率大幅提升。

我的环境详情在这里

  1. Master:db.m3.2xlarge instance
  2. Slave1:db.m3.2xlarge instance
  3. Slave2:db.m3.2xlarge instance
  4. Slave3:db.m3.xlarge实例
  5. Slave4:db.m3.xlarge实例
  6. [注意:所有奴隶都处于1级复制]

    我已将Master配置为仅接收写请求,此实例都很好。写入次数为每秒50到80次,CPU利用率约为20%到30%

    但除此之外,我所有的奴隶都表现得非常糟糕。 Slaves被配置为仅接收读取请求,并且我假设所有正在发生的写入都是由于复制。

    这些盒子上的预配置IOPS为1000 并且平均每个从站有5到7个读取请求,CPU利用率为60%。 在Native Postgres中,我们保持30%的流量。

    无法确定RDS设置上的错误,AWS支持无法提供良好的潜在客户。

    有没有人与RDS Postgres面对类似的事情?

2 个答案:

答案 0 :(得分:9)

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

  • 可用磁盘空间
  • CPU使用率
  • I / O使用等。

前几天我遇到了同样的问题。对我来说,原因是一些交易长期以来一直停滞不前。因此,CPU利用率逐渐增加。我通过运行一些postgreSql监控命令来了解这一点:

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

此命令显示事务运行的时间。这个时间不应该超过一个小时。因此杀死长时间运行的交易或者在任何时候停滞不前的交易对我有用。我跟着this帖子进行监控并解决了我的问题。 Post包含许多有用的命令来监控这种情况。

答案 1 :(得分:0)

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