我们运行一个大约38GB的Postgres数据库,托pipe在一个68GB的EC2实例上。 它一直在嗡嗡作响,在大约16小时之前,CPU负载在0.7(8核心的机器上)和CPU使用率很小,当CPU使用率在几个小时的时间内增加了,现在比以前要高很多(大约20 %),平均负荷也相应增加(现在在5到8之间)。
根据pg_stat_activity,机器可以看到100到300个同时连接。 我们最大的表格大约有9.0GB,包括索引。
以下是我们排除的内容:
任何想法如何进行,或追踪这个问题?
如果可以的话,打开完整的日志logging(~10分钟)。 保存日志,并有pgfouine( http://pgfouine.projects.postgresql.org/ )分析它。 有可能你做了比以前更多的查询,或者你正在做一个效率不高的查询。
接下来可能会有一些缓慢的查询影响事情。 看看现在正在运行哪些查询:
SELECT pg_stat_activity.procpid AS pid, pg_stat_activity.usename AS username, pg_stat_activity.waiting, now() - pg_stat_activity.query_start AS age, pg_stat_activity.current_query AS query FROM pg_stat_activity WHERE pg_stat_activity.current_query <> '<IDLE>'::text ORDER BY now() - pg_stat_activity.query_start DESC;
查找列表顶部的查询。 有人跑了很长时间吗? 如果你有一个已经开放了16个小时以上的交易,肯定会使事情减慢很多。