Answers:
您可以使用pg_stat_activity
系统表将特定的Postgres后端ID与系统进程ID匹配。
SELECT pid, datname, usename, query FROM pg_stat_activity;
可以是一个很好的起点。
一旦知道正在运行的查询,就可以进一步调查(EXPLAIN
/ EXPLAIN ANALYZE
;检查锁等)。
WHERE
子句将其隔离,但是如果您没有大量的PID,则就像易于搜索全部输出。Postgres手册还详细介绍了您可以从中获得的信息pg_stat_activity
以及其他统计信息收集器表(如果您的问题不是用户查询,则可以为您提供帮助)。
我有同样的问题。PostgreSQL是在AWS RDS上设置的,即使增加实例后,CPU利用率仍为100%。我使用此处显示的方法进行了调试,其中一种方法对我有用。
我检查了查询运行时间最长的时间,发现某些查询自3-4个小时以来一直处于阻塞状态并正在运行。要检查查询运行了多少时间,请运行以下命令:
SELECT max(now() - xact_start) FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active');
如果超过一个小时,那就不是问题了。终止长时间运行的连接,并从应用程序一侧限制连接的最长期限。
如果这确实是使用所有CPU的邮局主管,则可能是由于极高导致的锁争用问题max_connections
。max_connections
在这种情况下,请考虑降低并使用连接池。
否则:请提供详细信息。的完整输出top -b -n 1
开始。
postgress
是postgres
,您只是手工复制了它。