今天登录服务器时,习惯性地看了一眼监控,结果发现服务器状态异常:Load Average(负载)飙升,风扇狂转。
我立刻执行了 top 命令进行排查,结果发现 mysqld 进程的 CPU 占用率竟然高达 150% - 200%,长期居高不下。一开始我以为是内存不足,但使用 free -h 查看后发现内存剩余十分充足,并没有发生 OOM(内存溢出)。
既然不是内存问题,那肯定就是数据库内部在进行某种高强度的计算或发生了死锁。为了搞清楚 MySQL 到底在“忙”什么,我查阅了相关资料,最终通过一行原生命令成功抓住了导致卡顿的几条 SQL 语句。
这篇文章就是这次排查过程的总结,希望能帮到遇到同样问题的你。

1. 核心命令:透视 MySQL 内部状态
无需安装任何第三方工具,直接在 Linux 终端执行以下命令,就能看到 MySQL 当前正在执行的所有线程:
参数详解
- -u root: 使用 root 管理员用户登录。
- -p: 提示输入数据库密码(回车后输入)。
- -e: 执行引号内的 SQL 语句并退出,不进入交互模式,方便快速查看。
- "show full processlist;":
- show processlist 是查看线程的标准命令。
关键点在于 full:如果不加 full,输出的 SQL 语句会被截断。你可能只看到 SELECT * FROM... 却看不到后面关键的 WHERE 条件,导致无法判断问题所在。
请登录后发表评论
注册
停留在世界边缘,与之惜别