SHOW PROCESSLIST是排查MySQL锁表问题最直接命令,可查看连接、SQL、State等关键字段;需结合FULL修饰、performance_schema或sys.innodb_lock_waits定位阻塞链,再用KILL安全终止问题线程。

在 MySQL 中,SHOW PROCESSLIST 是排查锁表问题的最直接、最常用的命令之一。它能帮你快速识别出正在运行的连接、执行中的 SQL、状态(State)以及是否被阻塞,从而定位造成锁表的“罪魁祸首”。
一、基础用法:查看当前所有连接
执行以下命令即可列出当前所有客户端连接:
SHOW PROCESSLIST;
普通用户只能看到自己的连接;拥有 PROCESS 权限(如 root 或 DBA)才能看到全部。若看不到完整 SQL,可加 FULL 修饰:
SHOW FULL PROCESSLIST;
二、重点关注字段:快速识别锁相关进程
结果中关键列包括:
- Id:线程唯一标识,用于后续 kill
- User:连接用户,帮助判断来源(如应用服务、运维账号)
- Host:来源 IP 和端口,便于联系对应服务方
- db:当前操作的数据库
-
Command:命令类型,
Query表示正在执行 SQL,Sleep通常是空闲连接 -
Time:该线程持续时间(秒),长时间运行的
Query很可能是锁源或被阻塞者 -
State:核心线索!常见锁相关状态有:
•Waiting for table metadata lock—— 等待元数据锁(典型于 DDL 操作阻塞查询)
•Locked(旧版本)或Waiting for table level lock—— 表级锁等待
•Updating/Deleting/Sorting result长时间停留 —— 可能持有行锁未释放 -
Info:正在执行的 SQL 语句(
FULL模式下才显示完整内容)
三、结合 performance_schema 定位真正阻塞链(MySQL 5.6+)
SHOW PROCESSLIST 能发现“症状”,但无法直接告诉你谁在阻塞谁。此时需查 performance_schema:
启用相关监控(若未开启):
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME = 'wait/lock/metadata/sql/mdl';UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%lock%';
然后执行:
SELECT * FROM performance_schema.metadata_locks WHERE LOCK_STATUS = 'PENDING';
再关联 threads 表查出阻塞者和被阻塞者的线程 ID 和 SQL。
更便捷的方式是使用:
SELECT * FROM sys.innodb_lock_waits;(需启用 sys schema,自动解析 InnoDB 行锁等待关系)
四、安全终止问题进程
确认无误后,用 KILL 终止可疑线程:
KILL [CONNECTION] <font color="red">Id值</font>;
注意:
-
KILL默认发送中断信号,事务会回滚;KILL QUERY仅终止当前语句(不杀连接) - 避免直接 kill 系统线程(如 Id ≤ 3 的后台线程)
- 生产环境建议先
EXPLAIN或SHOW CREATE TABLE确认 SQL 是否可优化,而非一味 kill

















