有道-MySQL 8 锁等待取证视图

MySQL 8 锁等待:先分清取证视图

从有道云笔记提炼的诊断线索。源笔记是一份通用指南,没有可核验的事故记录;本页未在具体实例上验证,也不构成生产处置步骤。

适用边界

面向 MySQL 8.0 的 InnoDB 数据锁、表元数据锁和死锁调查。使用前核对具体小版本、sys 与 Performance Schema 视图是否可用,以及查询权限;其他版本或兼容产品不能直接套用。8.0 中不应沿用旧的 INFORMATION_SCHEMA.INNODB_LOCKS / INNODB_LOCK_WAITS 查询思路。

先按现象选证据

要回答的问题候选只读视图或命令证据边界
此刻哪些 InnoDB 事务互相等待?sys.innodb_lock_waits;需要底层关系时看 performance_schema.data_lock_waits反映查询时刻的等待关系;结果为空不能证明没有持锁事务,也不能排除稍早发生的等待。
哪些数据锁已获授或正在等待?performance_schema.data_locksLOCK_STATUS 区分 GRANTEDWAITINGLOCK_TYPE=TABLE 还可能是意向锁,不能单凭字段断定整表被业务操作锁住。
DDL 是否在等表元数据锁?sys.schema_table_lock_waits,辅以连接状态将等待会话、阻塞会话和对象对应起来;DDL 卡住只是调查入口,原因仍需证据确认。
阻塞会话当前没有 SQL,事务是否还在?information_schema.innodb_trx,辅以 SHOW FULL PROCESSLISTtrx_query 为空不代表事务已提交;核对事务开始时间、连接和业务归属。
已消失的等待是否涉及死锁?SHOW ENGINE INNODB STATUS 中最近一次死锁信息只提供有限历史窗口,不能证明所有过去的死锁。

事实、假设与处置

视图中实际出现的等待方、阻塞方、事务和时间是待留存的观察;“长事务导致阻塞”“缺少索引导致锁范围扩大”只是需要继续核查的假设。取证时记下采样时间、数据库版本、会话与事务的对应关系,并将 SQL 文本、账号和对象名从共享记录中脱敏。

终止语句或连接属于处置,不能从一条等待关系直接推出。尤其只终止当前语句时,未提交事务可能仍持锁;终止连接也可能触发较长时间的回滚。进入处置前,使用 阻塞事务处置草稿 核对业务影响、目标归属和授权。

待核查

  • 在目标 MySQL 小版本上确认视图字段、权限、采集开销及元数据锁观测是否可用。
  • 用可控演练分别验证数据锁等待、元数据锁等待和空闲未提交事务的证据差异。
  • 若要形成可执行手册,补上环境绑定的采样命令、停止条件和恢复验收。

关联:MySQL 专题锁等待与事务数据库慢排查