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