谷歌云PostgreSQL:利用率保持在100%

4
我正在使用谷歌云的PostgreSQL,它的CPU利用率达到了100%。我已经将实例升级到使用2个核心,现在实例正在运行2个CPU和3.75GB的RAM。然而,实例仍在使用100%的CPU资源。之后,我将实例升级到6个核心和12GB的RAM,但是CPU利用率仍然没有改变。以下是一些统计指标数据: Transition Read/write CPU 我想知道这是什么原因造成的,如何找到解决方案?我已经检查了在PostgreSQL上运行的查询数量,查询数量少于100个,执行时间少于30秒。PostgreSQL的版本为9.6。

请考虑您可能已经被黑客攻击。 - JGH
1
在每秒交易量下降的大约同一时间,CPU利用率也有所下降。可能是每秒发生658次的交易占用了大量CPU资源,导致了高CPU利用率。第一个图表中标为蓝色/紫色的交易是什么?在大约9:25左右,每秒交易量再次下降,那时CPU利用率是否也下降了? - Guillermo Cacheda
显示为蓝色/紫色的是正在运行数据库服务。 - Fahad Abid
此问题最好由GCP支持团队处理,因为他们可以访问Cloud PostgreSQL实例的内部指标。如果您有资格获得支持,请按照以下步骤联系他们:(https://cloud.google.com/support/docs/#contacting_technical_support)。 - Guillermo Cacheda
1个回答

3
我现在每天都在做这个,我将分享如何调试此问题。
首先,安装扩展 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。
编辑: Google发布了查询见解,当您不想弄脏自己的手时很有用! 我仍然使用pgstatstatements!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接