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。

适用环境Linux / 数据库 / 连接池
风险等级
最后验证2026-06-30
建议权限普通用户

Scenario

什么时候用这组命令

这组命令适合在处理“MySQL 查看锁等待和事务命令”时作为第一轮检查模板。使用时先替换占位符,再在目标机器或目标 namespace 中执行,避免在错误环境里得到误导结论。

Input

你需要先准备什么

  • 先区分连接、认证、锁、慢查询、连接池、内存或持久化问题。
  • 记录数据库端时间、应用实例数、连接池大小和报错 SQL。
  • 任何 kill/调参前先确认是否影响正在执行的业务事务。

Risk Notes

执行风险

  • 不要只调大 max_connections 掩盖连接泄漏或慢查询,这会让问题在更大规模上爆发。
  • 不要在不了解用途时 FLUSHALL、DROP 或重启数据库,先确认这些操作对各业务的影响。
  • 不要在生产环境直接执行未在测试环境验证过的 DDL 或 DML 操作。

Commands

命令详解

命令 1: 查询 MySQL 状态

用于读取数据库当前连接、事务、锁或配置状态。执行前确认账号权限,涉及 KILL 的命令必须先判断事务影响。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 1: 查询 MySQL 状态
mysql -e "SHOW FULL PROCESSLIST"

命令 2: 查询 MySQL 状态

用于读取数据库当前连接、事务、锁或配置状态。执行前确认账号权限,涉及 KILL 的命令必须先判断事务影响。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 2: 查询 MySQL 状态
mysql -e "SHOW ENGINE INNODB STATUS\G"

命令 3: 查询 MySQL 状态

用于读取数据库当前连接、事务、锁或配置状态。执行前确认账号权限,涉及 KILL 的命令必须先判断事务影响。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 3: 查询 MySQL 状态
mysql -e "SELECT * FROM information_schema.innodb_trx\G"

命令 4: 查询 MySQL 状态

用于读取数据库当前连接、事务、锁或配置状态。执行前确认账号权限,涉及 KILL 的命令必须先判断事务影响。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 4: 查询 MySQL 状态
mysql -e "SELECT * FROM performance_schema.data_lock_waits\G"

命令 5: 查询 MySQL 状态

用于读取数据库当前连接、事务、锁或配置状态。执行前确认账号权限,涉及 KILL 的命令必须先判断事务影响。

  • 先替换尖括号占位符,不要原样执行。
  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
  • 该命令可能有副作用,生产执行前确认影响范围。
命令 5: 查询 MySQL 状态
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 死锁查看