MySQL中 SHOW FULL PROCESSLIST` 输出中 `State` 列的所有可能值

SHOW FULL PROCESSLIST输出中State` 列的所有可能值,以及这些值代表的含义,这能帮你精准判断数据库连接的状态(包括锁相关、执行状态等)。

一、State 列核心分类及含义

State 列描述了当前线程正在执行的操作状态,不同状态对应不同的数据库行为,以下是最常见且实用的分类(按场景划分):

1. 锁相关状态(排查锁表核心)

这是你最关心的锁表相关状态,直接反映锁等待 / 阻塞:

状态值 含义
Waiting for table lock 等待表级锁(MyISAM 引擎为主,InnoDB 显式加表锁时也会出现)
Waiting for row lock 等待行级锁(InnoDB 引擎行锁冲突,比如更新同一行数据)
Waiting for metadata lock 等待元数据锁(比如修改表结构时,其他线程正在读写该表)
Waiting for global read lock 等待全局读锁(比如执行 FLUSH TABLES WITH READ LOCK 时)
Waiting for unlock 等待解锁(线程持有锁但等待其他锁释放)

2. 查询执行相关状态

反映 SQL 执行过程中的阶段:

状态值 含义
Sending data 正在向客户端返回查询结果(不是 "发送数据慢",可能是查询计算 / 扫描数据耗时)
Executing 正在执行 SQL 语句(核心执行阶段)
Preparing 预处理 SQL(比如预处理语句 PREPARE)
Sorting result 正在对查询结果排序(比如 ORDER BY 未命中索引)
Creating sort index 创建临时排序索引(排序时无可用索引,性能差)
Copying to tmp table 将结果复制到临时表(比如 GROUP BY 未命中索引)
Reading from net 从客户端读取 SQL 语句
Writing to net 向客户端发送数据

3. 连接 / 空闲相关状态

状态值 含义
Sleep 线程空闲(无操作),等待客户端发送新的 SQL
Connected 刚建立连接,还未执行 SQL
Login 客户端正在登录数据库

4. 事务相关状态

状态值 含义
Starting 事务开始阶段
Committing 事务提交阶段
Rolling back 事务回滚阶段
Waiting for transaction lock 等待事务锁

5. 其他常见状态

状态值 含义
Analyzing 分析查询语句(优化器阶段)
Checking permissions 检查用户权限
Opening tables 打开表(表缓存不足时会频繁出现)
Closing tables 关闭表
Updating 正在执行更新操作(UPDATE/DELETE)
Inserting 正在执行插入操作(INSERT)

二、关键说明

  1. 状态是动态的 :State 是线程的瞬时状态 ,同一线程的状态会随操作阶段变化(比如从 Executing 变为 Sending data);
  2. 空值情况 :部分线程(如系统线程)的 State 可能为空;
  3. 异常识别 :如果大量线程停留在 Waiting for table lock/Waiting for metadata lock 等 "Waiting" 类状态,且持续时间长,说明存在锁阻塞或性能问题。

三、实用示例:筛选异常状态

你可以通过以下 SQL 快速筛选出锁等待 / 阻塞的线程:

sql 复制代码
-- 筛选所有锁等待相关的线程
SELECT id, user, host, db, command, time, state, info 
FROM information_schema.processlist 
WHERE state LIKE 'Waiting for%lock%' 
  AND info IS NOT NULL;

总结

  1. 核心锁状态 :排查锁表重点关注 Waiting for table lock、Waiting for row lock、Waiting for metadata lock 这三类状态;
  2. 性能相关 :Copying to tmp table、Sorting result 等状态通常提示 SQL 未优化(缺少索引);
  3. 空闲状态 :Sleep 状态线程过多可能是连接未释放,需检查应用连接池配置。
相关推荐
蜗牛互联网9 小时前
WSL Containers GA:本地AI容器的生命周期、网络与治理验收
java·网络·人工智能·后端
Zhou14113610 小时前
SpringBoot_02_自动配置原理
java·spring boot·后端
子兮曰11 小时前
Node.js 50个优势场景盘点:一个人单干,为啥我多数时候只用它
前端·后端
IT_陈寒11 小时前
我花3小时debug,就因为JavaScript这个隐式转换坑
前端·人工智能·后端
程序猿阿越12 小时前
containerd如何拉取镜像
后端·kubernetes·源码阅读
一条小小yu12 小时前
为什么使用springboot
java·spring boot·后端
香瓜子rd12 小时前
MySQL InnoDB 并发控制核心原理:事务、隔离级别、MVCC 与锁机制
数据库·后端
RISCV_Explorer12 小时前
RISC-V RVV向量编程模型机制解析——vsetvl配置、掩码与尾元素策略及长度无关编程
后端·risc-v
对象存储与RustFS12 小时前
升级 RustFS 二进制不停机:一条一条换,留一条退路
后端·rust·开源
hasty12 小时前
限制写了却没生效:OpenTelemetry Go 的 Unicode 截断边界
开发语言·后端·golang