我正在使用aws rds Postgres 9.4。我面临一个CPU利用率很高的问题。实例类型为t2.xlarge (16 gb ram)。
一直以来,我都能看到非常低的内存使用率,即14 gb的免费,15 gb的免费。
但是与之相比,cpu利用率是100%,有100个活动连接。
我在pg_stat_activity中检查了所有查询,慢速查询日志。没发现什么不对。虽然它涉及到100%的CPU利用率和我的应用程序变得没有功能,即使是非常不活跃的连接。
什么是降低高CPU利用率相对于如此高内存的解决方案?
当它达到100% CPU时,我的写入IOPS是400计数/秒,读取IOPS是8.5计数/秒。
当我的网站流量很高时,我需要处理300个并发连接。rds实例的空闲配置应该是什么?
发布于 2020-04-23 10:23:03
有一次,我遇到了AWS实例的问题,即使在将其从t2.media更改为m3.xlarge之后,它的CPU利用率也是100%。问题是一些查询被卡住了,持续运行了几个小时,CPU一直忙着。通过控制台触发的同样的查询在4-5秒内给出了输出,这也太多了。虽然成功地执行了来自控制台的相同查询,但有时它会被卡住,并持续运行数小时。
下面是我试图找到问题根源的调试方法
主要针对PostgreSQL的一套全面的系统性能指标是:
磁盘空间:您必须有10%的磁盘空间可用的Postgres数据分区,因为磁盘空间可能波动在Postgres真空时,高写负载。
CPU使用率:高CPU使用率会降低系统性能,因为它还显示出严重优化的查询,这需要大量的CPU时间。绑定CPU是Postgres的最佳情况。
I/O使用:如果Postgres运行缓慢,首先测量IO等待的CPU百分比,它指示计算机等待磁盘的时间长度
**Watch Postgres Factors**max_connections确定数据库服务器并发事务的最大数量,并给出泄漏数据库连接的客户端列表。
命令:
中选择count(*)
划分的连接数
四种可能的连接状态是:(a)当前执行事务查询的活动连接。
(b)空闲-不执行事务的连接。(c)在长时间运行的事务I.E中,事务连接空闲。(d)空闲事务(中止)--在由于错误而未回滚事务的情况下进行连接。
命令:
的连接
等待锁定的阻塞连接表示使用独占锁执行事务的速度缓慢。
命令:
事务应该尽可能短,因为它将在一分钟内执行。长期运行的事务阻止Postgres对旧数据进行真空处理,它可能会由于事务ID(xid)环绕而关闭数据库。如果输出的时间超过一个小时,这是一个令人担忧的问题,因为自该持续时间以来,查询一直在运行,使资源处于忙碌状态。根据数据库查询的平均响应时间,将连接的最大年龄参数(在应用程序代码中)更改为最低可能值,如2-3秒。
命令:
频繁的检查点导致向下,performance.Postgres将在其日志中显示这些检查点。此外,您还可以检查pg_stat_bgwriter表中的频率。
您必须在应用程序level.Or中测量它,方法是定期设置和分析日志查询( log_min_duration_statement=0 )或监视pg_stat_statements模块。
https://serverfault.com/questions/954053
复制相似问题