我正在使用CPU利用率为100%的Google Cloud PostgreSQL。我已将该实例升级为使用2个核心。现在,该实例在2个CPU和3.75Gb RAM上运行。实例仍然使用100%的CPU资源。同样,我已将实例升级到6核和12Gb RAM,但CPU利用率仍然没有变化。以下是一些统计指标:
我想知道为什么会这样,如何找到解决方案? 我检查了在PostgreSQL上运行的查询数量。查询数少于100,执行时间少于30秒。 PostgreSQL版本是9.6
答案 0 :(得分:1)
我现在每天都在做此事,我将分享如何调试此问题。
首先,安装extension pgstatstatements,以便它将存储在服务器上执行的所有SQL语句的所有执行统计信息。
之后,这很容易...
此查询将显示大多数“昂贵”查询:
SELECT substring(query, 1, 50) AS short_query,
round(total_time::numeric, 2) AS total_time,
calls,
round(mean_time::numeric, 2) AS mean,
round(max_time::numeric, 2) AS max_time,
round((100 * total_time / sum(total_time::numeric) OVER ())::numeric, 2) AS percentage_cpu,
query
FROM pg_stat_statements
ORDER BY total_time DESC LIMIT 10
这是一个重置统计信息的字段,在您要调试特定时间段时非常有用:
SELECT pg_stat_statements_reset()
为了查看服务器上当前正在运行哪些查询:
SELECT user, pid, client_addr, query, query_start, NOW() - query_start AS elapsed
FROM pg_stat_activity
WHERE query != '<IDLE>'
-- AND EXTRACT(EPOCH FROM (NOW() - query_start)) > 1
ORDER BY elapsed DESC;
如果您有更好的性能调试方法,请告诉我! 另外,如果某些GCP工程师正在阅读此书,请启用更多指标以使我们能够追踪问题。服务器上的示例进程CPU可以判断哪个DB / Schema占用了过多的CPU。