首页/数据/数据库速查/MDL 元数据锁等待排查
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条
性能与调优57 条
Redis 命令96 条Redis 运维与场景124 条

MDL 元数据锁等待排查

DDL 等 MDL:长事务(哪怕只是 BEGIN 后没提交的读)会挡住 ALTER;DDL 又挡后面的 DML,形成雪崩队列。看 P_S.metadata_locks 定位。

数据库速查数据更新于 2026-10-12

MDL 现场

MDL 现场
SELECT * FROM performance_schema.metadata_locks
WHERE OBJECT_SCHEMA='appdb'\G
-- 找 PENDING 的 DDL 与 GRANTED 的长事务
SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id
FROM information_schema.INNODB_TRX ORDER BY trx_started LIMIT 5;
源头未提交事务(含只读)、长查询、备份工具持锁
现象DDL 卡住、后续查询排队、连接数飙升
处置找到源头事务确认后 KILL;DDL 避开业务高峰
lock_wait_timeout(默认 31536000 秒=1 年)不对 DDL 生效:MDL 等待可能超出预期时长。

易错点

  • 「只是 SELECT 不提交」也会挡 DDL:应用的长连接空事务极为常见
  • DDL 被挡住后反复重试新连接:排队叠加,把库推向连接数上限

数据来源与参考

  • MySQL 8.0 Reference Manual: Metadata Locking

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌