Sunday面试指南

MySQL 元数据锁 MDL 是什么?为什么 ALTER TABLE 会让后续查询一起阻塞?

下面是一段教学模拟,不是真实面试记录。

🧑‍💻 面试官:一条 SELECT 很久没结束,ALTER TABLE 又在等锁,后来新的 SELECT 也堵住了,为什么?

🙋‍♂️ 我:可能 ALTER TABLE 锁了所有行。

🧑‍💻 面试官:DDL 还没有拿到需要的锁,而且新查询不读取同一行,这能用行锁解释吗?

🙋‍♂️ 我:应该还涉及表结构的锁。

🧑‍💻 面试官:对。先说清谁持有 MDL、谁在等,再解释等待中的 DDL 怎么影响后续请求。

要沿着「持有者 → 等待 DDL → 后续请求」看等待链。MVCC 能帮助读取行版本,不代表表结构可以不受锁保护。

面试速答(60 秒版)

MDL 是元数据锁,用来协调表等对象的结构使用与修改。查询需要相应的元数据锁,ALTER TABLE 也需要取得相关锁才能安全修改结构。

在事务里,已经取得的表元数据锁通常要保留到事务结束。因此长事务即使已经执行完一条查询,也可能继续挡住 DDL。

等待中的 DDL 又可能因为锁调度规则,让后续查询一起等待,造成请求堆积。不能只检查 DDL 是否正在执行。

排查时应查看元数据锁的持有者、等待者及事务状态,先确认等待链,再制定处理方案。MDL 与行锁、对应超时设置是不同机制,Online DDL 也不是完全不需要 MDL。

元数据锁保护表结构,查询返回后长事务仍可能持有锁

知识点详解:一条等待中的 DDL,怎样把影响扩大?

MDL 保护的是对象结构,不是某一行

查询读取一张表,需要确定它的字段和结构。与此同时,另一个连接不能任意修改结构,让正在使用这张表的语句失去依据。

MDL 就承担这一类协调。它与 InnoDB 行锁保护的对象不同,不能因为查询使用一致性读,就判断不会受到任何锁等待影响。MDL 官方说明

查询结束,事务可能还没有结束

假设连接 A 开启事务,查询 orders,随后应用迟迟没有提交或回滚。

SELECT 已经返回了结果,但事务仍然打开,相关 MDL 可以继续保留。A 看起来处于空闲等待,也不能因此排除它是阻塞者。

连接 B 此时执行 ALTER TABLE,需要取得不兼容的锁,于是等待 A 结束。

自动提交语句与显式长事务的生命周期不同,排查时不能只看当前语句用了几秒。

后来的查询为什么也可能排队?

再让连接 C 查询同一张表。

虽然 C 的查询与 A 的读取可能兼容,但它不能保证直接绕过等待中的结构修改请求。MDL 有请求优先级和调度规则,等待的写请求可能影响后续读请求。

于是出现这条教学等待链:

连接当前状态影响
A查询后事务未结束,持有 MDLB 无法取得所需锁
BALTER TABLE 等待可能影响 C 等后续读请求调度
C新查询等待 MDL接口请求开始堆积

这里用“可能”,不是承诺所有锁类型与所有设置下都严格按这一条顺序。真实原因应由锁信息证明。

A 的长事务,怎样挡住 B 和 C:先找持有者和等待链

排查要找链路,不是先终止一个连接

可以查看 Performance Schema 的 metadata_locks,区分 GRANTED 与 PENDING,再结合线程、事务与语句信息确认对象和持有者。观测表说明

接着判断:是不是遗留事务,DDL 是否可延期,后续请求是否正在积累,终止哪一步的风险最小。

有时先停止等待的 DDL 可以缓解后续压力,但这不应变成所有事故的固定答案。终止事务可能引起回滚,终止 DDL 也有执行阶段和资源影响,必须按实际情况处理并获得操作授权。

MDL 等待通常涉及 lock_wait_timeout;innodb_lock_wait_timeout 主要针对 InnoDB 行锁等待。改错参数,可能根本没有解决当前问题。

查锁等待要合并哪些信息:锁、线程、事务一起看

面试官继续追问

Online DDL 为什么也会等?

Online 描述的是特定操作阶段对并发的支持,不代表整个生命周期不需要元数据锁。开始、结束等阶段仍应按操作和算法核对。

把长事务的 SELECT 优化快一点就够了吗?

不一定。查询完成后如果事务仍不结束,锁依然可能保留。需要检查事务边界、异常路径和连接使用方式。

怎样避免上线改表时大面积阻塞?

先检查长事务与锁等待,确认 DDL 的算法、阶段和预算,在合适窗口执行并观察等待链。不能只在低峰期运行就假定没有风险。

面试速记卡

  • MDL:协调对象结构的使用与修改,不是行锁。
  • 长事务:语句结束不等于事务结束,MDL 可能继续持有。
  • 等待链:持有者挡住 DDL,等待 DDL 又可能影响后续查询。
  • 观测:metadata_locks 配合线程、事务和语句定位。
  • 边界:Online DDL 仍可能需要 MDL,超时参数不要与行锁混淆。

公司面试真题

这道题暂未收录可核验的公司真题来源。你可以先阅读本文解析,或浏览已收录的公司面试真题。

浏览公司面试真题 →
简历汪永久免费在线制作简历,模板直接套用、导出无水印,永久免费、下载免费,不需要付费解锁任何功能。去写简历