database Command
MySQL 查看锁等待和事务命令
MySQL 排查锁等待和事务阻塞的常用命令,SHOW FULL PROCESSLIST 看当前活跃会话与状态,SHOW ENGINE INNODB STATUS 读 LATEST DETECTED DEADLOCK,information_schema.innodb_trx 和 performance_schema.data_lock_waits 找 blocking 事务,必要时 KILL <thread_id>。
锁等待先看当前 processlist 和 InnoDB transactions,找到谁在等、谁在挡,再决定是否 kill。
Scenario
什么时候用这组命令
这组命令适合在处理“MySQL 查看锁等待和事务命令”时作为第一轮检查模板。使用时先替换占位符,再在目标机器或目标 namespace 中执行,避免在错误环境里得到误导结论。
Input
你需要先准备什么
- 先区分连接、认证、锁、慢查询、连接池、内存或持久化问题。
- 记录数据库端时间、应用实例数、连接池大小和报错 SQL。
- 任何 kill/调参前先确认是否影响正在执行的业务事务。
Risk Notes
执行风险
- 不要只调大 max_connections 掩盖连接泄漏或慢查询,这会让问题在更大规模上爆发。
- 不要在不了解用途时 FLUSHALL、DROP 或重启数据库,先确认这些操作对各业务的影响。
- 不要在生产环境直接执行未在测试环境验证过的 DDL 或 DML 操作。
Commands
命令详解
命令 1: 查询 MySQL 状态
用于读取数据库当前连接、事务、锁或配置状态。执行前确认账号权限,涉及 KILL 的命令必须先判断事务影响。
- 确认命令运行位置正确。
- 保留关键输出,方便和修复后对比。
mysql -e "SHOW FULL PROCESSLIST"命令 2: 查询 MySQL 状态
用于读取数据库当前连接、事务、锁或配置状态。执行前确认账号权限,涉及 KILL 的命令必须先判断事务影响。
- 确认命令运行位置正确。
- 保留关键输出,方便和修复后对比。
mysql -e "SHOW ENGINE INNODB STATUS\G"命令 3: 查询 MySQL 状态
用于读取数据库当前连接、事务、锁或配置状态。执行前确认账号权限,涉及 KILL 的命令必须先判断事务影响。
- 确认命令运行位置正确。
- 保留关键输出,方便和修复后对比。
mysql -e "SELECT * FROM information_schema.innodb_trx\G"命令 4: 查询 MySQL 状态
用于读取数据库当前连接、事务、锁或配置状态。执行前确认账号权限,涉及 KILL 的命令必须先判断事务影响。
- 确认命令运行位置正确。
- 保留关键输出,方便和修复后对比。
mysql -e "SELECT * FROM performance_schema.data_lock_waits\G"命令 5: 查询 MySQL 状态
用于读取数据库当前连接、事务、锁或配置状态。执行前确认账号权限,涉及 KILL 的命令必须先判断事务影响。
- 先替换尖括号占位符,不要原样执行。
- 确认命令运行位置正确。
- 保留关键输出,方便和修复后对比。
- 该命令可能有副作用,生产执行前确认影响范围。
mysql -e "KILL <thread_id>"Workflow
建议执行顺序
按顺序执行,不要跳过确认类命令
先用只读命令确认状态,再执行会改变状态的命令。锁等待先看当前 processlist 和 InnoDB transactions,找到谁在等、谁在挡,再决定是否 kill。
- 查看当前活跃 SQL 和状态。
- 读取 InnoDB status 中事务和死锁信息。
- 找出长事务和阻塞关系。
- 确认会话可安全中断后再 kill。
- 事后回到应用事务边界和索引设计修根因。
mysql -e "SHOW FULL PROCESSLIST"
mysql -e "SHOW ENGINE INNODB STATUS\G"
mysql -e "SELECT * FROM information_schema.innodb_trx\G"把命令输出变成结论
命令本身不是结论。每次执行后要回答:目标是否存在、状态是否异常、异常是否能解释用户看到的现象。
- 记录关键字段,而不是整屏复制
- 把正常路径和异常路径输出对比
- 输出为空也要解释:是确实没有,还是权限/过滤条件不对
mysql -e "SHOW ENGINE INNODB STATUS\G"
mysql -e "SELECT * FROM information_schema.innodb_trx\G"
mysql -e "SELECT * FROM performance_schema.data_lock_waits\G"执行前替换占位符并控制影响范围
包含 <service>、<pod>、<namespace>、<pid>、<container> 的命令必须先替换。涉及 reload、restart、KILL、vacuum、prune 的命令要确认影响范围。
- 优先在测试环境或只读模式验证
- 生产执行前保留回滚路径
- 把最终可用命令写入工单或 runbook
mysql -e "SELECT * FROM performance_schema.data_lock_waits\G"
mysql -e "KILL <thread_id>"Verification
怎么判断命令有效
- 命令已在正确机器、正确用户、正确 namespace 或正确仓库下执行。
- 输出能支撑明确判断:正常、异常、权限不足、目标不存在或需要下一跳排查。
- 对有副作用的命令,已确认执行窗口、影响范围和回滚方式。
Prevention
沉淀到日常流程
- 为连接数、慢查询、锁等待和内存使用建立趋势监控,在问题发生前发现异常趋势。
- 把连接池大小按实例总数统一规划,而不是每个服务单独拍脑袋,避免 max_connections 被耗尽。
- 对批量更新、迁移脚本和缓存写入设置限速与回滚方案,防止误操作导致大范围故障。
- 定期审查慢查询日志和索引使用情况,主动优化而非被动应对。
常见问题
KILL 会不会回滚事务?
会终止对应连接,未提交事务会回滚。大事务回滚本身也可能持续较久。
Long-tail SEO
你可能正在搜索这些报错
下面这些错误原文、场景词和中英文搜索词,都是排查同类问题时常见的入口。
- mysql 查看锁
- SHOW PROCESSLIST
- mysql Kill 进程
- mysql 锁等待排查
- SHOW FULL PROCESSLIST
- mysql 死锁查看
Need More Help
这组命令还不够贴合你的场景?
把你的系统环境、目标操作和报错贴过来,我会优先补充更具体的命令模板。