1. 问题现象与初步判断
最近在维护线上MySQL数据库时,突然收到监控系统告警:某台数据库服务器的CPU使用率持续超过90%,已经持续了半小时以上。这种异常情况如果不及时处理,轻则导致查询响应变慢,重则可能引发整个数据库的雪崩效应。
通过SSH连接到服务器后,我用top命令确认了CPU使用情况,发现确实是mysqld进程占用了大量CPU资源。这时候需要明确几个关键点:
- 是所有的CPU核心都满载还是某个核心特别高?
- CPU的sys和user比例如何?
- 是否有大量的上下文切换(context switch)或中断(interrupt)?
在我的案例中,所有核心的使用率都比较均衡,user占比在85%以上,这说明确实是MySQL在处理查询消耗了大量计算资源,而不是系统层面的问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 排查工具与方法论
2.1 性能监控三板斧
遇到MySQL CPU高的问题,我通常会按照以下顺序排查:
- SHOW PROCESSLIST
这是最直接的排查方法,可以查看当前正在执行的所有MySQL连接和查询。关键是要关注State列和Time列,找出那些长时间运行的查询。
sql复制SHOW FULL PROCESSLIST;
- 慢查询日志分析
如果processlist没有明显发现,就需要检查慢查询日志。需要确认slow_query_log是否开启,以及long_query_time的设置值。
sql复制SHOW VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'long_query_time';
- 性能模式(Performance Schema)
MySQL 5.6+版本提供的强大工具,可以获取更详细的性能数据。
sql复制-- 查看哪些SQL消耗最多CPU
SELECT * FROM sys.statement_analysis
ORDER BY avg_latency DESC LIMIT 10;
2.2 进阶诊断工具
除了上述基本方法外,还有一些更专业的工具:
- pt-query-digest:Percona提供的慢查询分析工具
- **mysq
