Google Cloud PostgreSQL:利用率仍为100%

时间:2018-07-30 16:40:44

标签: postgresql google-cloud-platform google-cloud-sql

我正在使用CPU利用率为100%的Google Cloud PostgreSQL。我已将该实例升级为使用2个核心。现在,该实例在2个CPU和3.75Gb RAM上运行。实例仍然使用100%的CPU资源。同样,我已将实例升级到6核和12Gb RAM,但CPU利用率仍然没有变化。以下是一些统计指标: Transition

Read/write

CPU

我想知道为什么会这样,如何找到解决方案? 我检查了在PostgreSQL上运行的查询数量。查询数少于100,执行时间少于30秒。 PostgreSQL版本是9.6

1 个答案:

答案 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。