admin管理员组文章数量:1516870
背景
线上mysql服务器经常性出现cpu使用率100%的告警, 因此整理一下排查该问题的常规流程。
1. 确认CPU占用来源
-
检查系统进程
使用top或htop命令,确认是否是mysqld进程导致CPU满载:top-c-p$(pgrep mysqld)
2. 实时分析MySQL活动
-
查看当前运行的SQL
登录MySQL,执行以下命令,观察是否有长时间运行或高频率的查询:SHOWFULL PROCESSLIST;-- 或过滤非空闲连接SELECT*FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND !='Sleep'ANDTIME>0;
-
终止问题查询
若发现异常查询,可通过KILL [PROCESS_ID]终止。
3. 分析慢查询与执行计划
启用慢查询日志
在MySQL配置文件(my.cnf/my.ini)中启用慢查询日志:slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 -- 阈值(秒)重启MySQL后,使用
mysqldumpslow或pt-query-digest分析日志。使用
EXPLAIN分析SQL
对可疑查询添加EXPLAIN,检查是否缺少索引或全表扫描:EXPLAINSELECT*FROM your_table WHERE your_condition;
4. 检查索引与表结构
-
索引缺失
通过SHOW CREATE TABLE检查表结构,确保高频查询字段有索引。 -
冗余索引
使用pt-duplicate-key-checker工具删除无效索引。 -
统计信息过时
执行ANALYZE TABLE your_table;更新统计信息。
5. 排查锁争用与事务
-
查看当前锁状态
SHOWENGINEINNODBSTATUS;-- 查看LATEST DETECTED DEADLOCKSELECT*FROM INFORMATION_SCHEMA.INNODB_TRX;-- 运行中的事务SELECT*FROM INFORMATION_SCHEMA.INNODB_LOCKS;-- 当前持有的锁 -
长事务处理
终止未提交的长事务或优化事务代码。
6. 检查MySQL配置
-
关键参数调优
innodb_buffer_pool_size:建议设置为物理内存的70%-80%。max_connections:避免过高导致资源争用。tmp_table_size和max_heap_table_size:减少磁盘临时表。
-
连接数监控
SHOWSTATUSLIKE'Threads_connected';-- 当前连接数SHOW VARIABLES LIKE'max_connections';-- 最大允许连接数
7. 系统资源与硬件瓶颈
-
内存与交换分区
使用free -h或vmstat检查内存是否不足,导致频繁Swap。 -
磁盘I/O
使用iostat或iotop查看磁盘负载,优化高I/O操作(如批量写入、索引重建)。 -
CPU架构
确认是否因并发线程过多导致CPU争用(如innodb_thread_concurrency设置)。
8. 其他可能原因
-
复制问题
主从复制延迟或错误可能导致从库CPU升高,检查SHOW SLAVE STATUS。 -
缓存失效
如查询缓存(query_cache_type)频繁失效,考虑关闭。 -
日志写入压力
关闭不必要的日志(如通用查询日志),或调整sync_binlog参数。
9. 使用专业工具
-
监控工具
Percona Monitoring and Management (PMM)、VividCortex 或 Prometheus + Grafana。 -
性能分析工具
pt-query-digest、mysqlsla或 MySQL自带的Performance Schema。
快速处理步骤
top确认MySQL进程导致CPU满载。SHOW PROCESSLIST查找异常查询。EXPLAIN分析问题SQL,优化索引或查询逻辑。-
终止阻塞进程(
KILL)或重启MySQL(临时恢复)。
通过以上步骤,多数情况下可以定位到CPU过高的根本原因,如慢查询、索引缺失、配置不当或硬件瓶颈,进而针对性优化。若问题复杂,建议结合监控工具长期跟踪分析。
最后
欢迎点击关注gzh: ,不错过每一次的干货!
版权声明:本文标题:从0到1,破解mysql高负载下的CPU瓶颈之谜 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/web/1772122265a3271302.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论