MDL 锁(Metadata Lock),即元数据锁。元数据指的是描述数据的数据,对数据及信息资源的描述性信息,在数据库中元数据即数据字典信息,包括 db,table,function,procedure,trigger,event 等。
MySQL 从 5.5 版本开始引入 MDL 锁,MDL 锁主要为了保证元数据的一致性(主要是保证 DDL 操作与 DML 操作之间的一致性),用于处理不同线程操作同一元数据对象的同步与互斥问题,在各个业务场景中会十分频繁地使用到。
具体而言,MySQL 引入 MDL 锁可以解决如下问题:
一是事务隔离问题,比如在可重复读隔离级别下,会话 A 在 2 次查询期间,会话 B 对表结构做了修改,2 次查询结果就会不一致,无法满足可重复读的要求。
二是数据复制问题,比如会话 A 执行了多条更新语句期间,另外一个会话 B 做了表结构变更并且先提交,就会导致 slave 在重做时,先重做 alter,再重做 update 时就会出现复制错误的现象。
本文转载自华为云技术公众号。
原文链接:https://mp.weixin.qq.com/s/sxcRvNtPv-EcSDOeJub5qA
评论