背景信息
MYSQL的MDL锁,用于解决或者保证DDL操作与DML操作之间的一致性,但是在部分场景下会出现阻塞,例如执行DML操作时执行ALTER操作、存在长时间查询时执行ALTER操作等等。
表象如下:
出现 Waiting for table metadata lock 且长时间处于等待状态,并阻塞所有后续对表的操作
MDL锁出现场景
- 创建、删除索引。
- 修改表结构。
- 表维护操作(optimize table、repair table 等)。
- 删除表。
- 获取表级写锁 。
被锁原因
- 当前有对表的长时间查询。
- 显示或者隐式开启事务后未提交或回滚,比如查询完成后未提交或者回滚。
- 表上有失败的查询事务。
解决办法
- 找到魏师傅 MDL 锁的session,kill掉
- 或 kill 掉DDL语句,等待下一次运维时间变更
使用有权限的用户执行`kill`即可终端问题会