一、一句话作用
show processlist 查看 MySQL 当前所有连接、正在执行的SQL、线程状态、锁等待、慢查询、阻塞源头。
完整版(查看所有用户+完整SQL):
show full processlist;
二、每个字段逐行详解(必须背)
| 字段 | 含义(超级通俗) |
| Id | 线程ID(连接ID),kill 用这个数字 |
| User | 连接MySQL的账号 |
| Host | 客户端IP:端口 |
| db | 当前连接的数据库 |
| Command | 线程当前动作(最关键) |
| Time | 该状态持续时间(秒) |
| State | 线程执行状态(排查核心) |
| Info | 正在执行的SQL(不执行SQL显示NULL) |
三、Command 字段最常见值(判断连接在干嘛)
- Query:正在执行SQL(正常/慢查询/卡死)
- Sleep:连接空闲,没执行SQL(长连接)
- Connect:连接中
- Binlog Dump:主库正在给从库发binlog(主从复制)
- Sleep:空闲连接
- Killed:标记杀死,等待回滚
- Quit:正在退出
四、State 状态详解(排查CPU/锁/IO/慢查询 核心!)
这是排查MySQL故障的灵魂,我只给你生产最常见、最关键的:
1. 【正常执行】
- executing:正在执行SQL
- Sending data:读取数据并返回给客户端(不是网络发送!很多人误解)
- Sorting result:排序中
- Updating:正在更新数据
2. 【IO/磁盘高】
- Creating tmp table:创建临时表(SQL太差,group by/order by无索引)
- Copying to tmp table:复制数据到临时表(性能灾难)
- Reading from net / Writing to net:网络读写
3. 【锁等待、阻塞】
- Waiting for table metadata lock:MDL元数据锁等待(DDL与查询冲突)
- Waiting for lock:等待行锁/表锁
- Locked:被锁住了
- User lock:用户锁等待
4. 【主从复制相关】
- Connecting to master
- Reading relay log
- Sending binlog event to slave
5. 【线程内部等待】
- Waiting for net read / net write
- Waiting for flush
五、实战:3 秒判断 MySQL 出了什么问题
1. 大量 Sending data
→ 慢查询正在疯狂扫表、没走索引、全表扫描
→ CPU 100%
2. 大量 Sleep
→ 空闲连接太多,连接池没释放
→ 不是故障,但浪费资源
3. 大量 Waiting for table metadata lock
→ 有人在执行 alter table,把所有查询堵住了
→ 业务全部卡死
4. 大量 Locked / Waiting for lock
→ 事务不提交,行锁长期持有
→ 业务阻塞
5. 大量 Creating tmp table / Copying to tmp table
→ SQL 写得烂,没有索引,临时表爆炸
→ IO 高、CPU 高
六、最常用实战命令
1. 看完整SQL(必须加 full)
show full processlist;
2. 杀掉慢查询/阻塞语句
kill 12345; -- 12345是Id
3. 只看正在执行的SQL
select * from information_schema.processlist where command='Query';
4. 查看执行超过 5 秒的慢SQL
select * from information_schema.processlist where time > 5;
关联文档
- MySQL 基础 — MySQL 基础
- MySQL 主从同步故障排查 — 主从排障