MySQL

MySQL show processlist详解

·4 分钟阅读·1484 字

梳理MySQL show processlist的核心机制、运维实践与排查要点

📋 目录

MySQL show processlist详解

1. Command 字段最常见值(判断连接在干嘛)

  1. Query:正在执行SQL(正常/慢查询/卡死)
  2. Sleep:连接空闲,没执行SQL(长连接)
  3. Connect:连接中
  4. Binlog Dump:主库正在给从库发binlog(主从复制)
  5. Sleep:空闲连接
  6. Killed:标记杀死,等待回滚
  7. 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;


关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro