MySQL源码学习——MDL字典锁
来源:未知 责任编辑:责任编辑 发表时间:2014-01-06 18:17 点击:次
-
什么是MDL
MDL,Meta Data lock,元数据锁,一般称为字典锁。字典锁与数据锁相对应。字典锁是为了保护数据对象被改变,一般是一些DDL会对字典对象改变,如两个TX,TX1先查询表,然后TX2试图DROP,字典锁就会lock住TX2,知道TX1结束(提交或回滚)。数据锁是保护表中的数据,如两个TX同时更新一行时,先得到row lock的TX会先执行,后者只能等待。
-
MDL的设计目标
字典锁在设计的时候是为了数据库对象的元数据。到达以下3个目的。
1. 提供对并发访问内存中字典对象缓存(table definatin cache,TDC)的保护。这是系统的内部要求。
2. 确保DML的并发性。如TX1对表T1查询,TX2同是对表T1插入。
3. 确保一些操作的互斥性,如DML与大部分DDL(ALTER TABLE除外)的互斥性。如TX1对表T1执行插入,TX2执行DROP TABLE,这两种操作是不允许并发的,故需要将表对象保护起来,这样可以保证binlog逻辑的正确性。(貌似之前的版本存在字典锁是语句级的,导致binlog不合逻辑的bug。)
相关新闻>>
- 发表评论
-
- 最新评论 进入详细评论页>>