正常使用情况下,AWS RDS实例PostgreSQL的CPU使用率为100%

时间:2019-02-14 13:49:32

标签: postgresql amazon-rds

我正在使用aws rds Postgres 9.4。我面临着CPU使用率很高的问题。实例类型为t2.xlarge(16 GB RAM)。

我一直都可以看到内存使用率非常低,即免费14 gb,免费15 gb。

但是相比之下,CPU利用率为100%,连接数为100。

我已经在pg_stat_activity中检查了我所有的查询,查询日志很慢。没有发现任何问题。尽管它达到了100%的CPU使用率,但即使活动连接非常少,我的应用也无法正常工作。

针对如此高的RAM降低CPU高利用率的解决方案是什么?

当达到100%CPU时,我的写入IOPS为400个计数/秒,而读取IOPS为8.5个计数/秒。

当我的网站上的流量很高时,我有时需要处理300个并发连接。 rds实例的空闲配置应该是什么?

1 个答案:

答案 0 :(得分:0)

虽然我支持在其他地方对配置提出疑问(例如理想的work_mem设置将允许从内存而不是磁盘提供更多查询),但CPU使用率过高也与次优查询有关,因此部分是软件问题。

从软件的角度来看:即使没有非常长的查询陷入困境,也可以通过使当前查询返回更快来提供额外的容量。

  1. 这个问题的负载听起来偏向于写操作,但是如果这些操作包含许多更新,或者如果读取花费的时间不成比例,那么仍然有可能通过覆盖这些列的索引来更有效地完成这些操作。

  2. p>
  3. 如果有频繁的插入或删除操作,则可能有助于在应用程序中批量进行插入或删除操作,并节省查询的开销,以换取额外的延迟。这样还可以减少应用程序的池大小,并避免了100个并行连接(如果50个实际上可能会使查询完成得更快)会产生一些开销。