mysql mdl 内核_深入理解MySQL的MDL元数据锁

本文深入探讨MySQL的MDL(元数据锁)机制,旨在解释其在保证DDL与DML操作一致性中的作用。MDL自5.5版本引入,防止并发问题并支持多种粒度的锁。文章分析了MDL锁的实现,包括不同对象层次和锁模式,并提及5.6及5.7版本的性能改进。同时,提供了诊断MDL锁的方法,包括MySQL 5.7中的metadata_locks表。
摘要由CSDN通过智能技术生成

4c8a07c1f9fc4fb91c7eed23ce0bcce2.png

前言

好久没更新,主要是因为Inside君最近沉迷于一部动画片——《新葫芦娃兄弟》。终于抽得闲,完成了本篇关于MySQLMDL锁的深入分析与介绍。虽然之前有很多小伙伴分析过,但总感觉少了点什么,故花了点时间翻看了下源码。Inside君或许不是最牛掰的内核开发人员,但自认为应该是业界最会讲故事的码农,希望本篇能做到通俗易懂,因为MDL锁其实并不好理解。如果同学们还有问题,也可以直接看源码文件mdl.cc。

MDL锁与实现

MySQL5.5版本引入了MDL锁(metadatalock),用于解决或者保证DDL操作与DML等操作之间的一致性。例如下面的这种情形:

87802089ea629c822c5f6787f135658a.png

若没有MDL锁的保护,则事务2可以直接执行DDL操作,并且导致事务1出错,5.1版本即是如此。5.5版本加入MDL锁就在于保护这种情况的发生,由于事务1开启了查询,那么获得了MDL锁,锁的模式为SHARED_READ,事务2要执行DDL,则需获得EXCLUSIVE锁,两者互斥,所以事务2需要等待。

InnoDB层已经有了IS、IX这样的意向锁,有同学觉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值