深入理解MySQL的MDL元数据锁

10

前言

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

MDL锁与实现

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

若没有MDL锁的?;?,则事务2可以直接执行DDL操作,并且导致事务1出错,5.1版本即是如此。5.5版本加入MDL锁就在于?;ふ庵智榭龅姆⑸?,由于事务1开启了查询,那么获得了MDL锁,锁的模式为SHARED_READ,事务2要执行DDL,则需获得EXCLUSIVE锁,两者互斥,所以事务2需要等待。

InnoDB层已经有了IS、IX这样的意向锁,有同学觉得可以用来实现上述例子的并发控制。但由于MySQL是Server-Engine架构,所以MDL锁是在Server中实现。另外,MDL锁还能实现其他粒度级别的锁,比如全局锁、库级别的锁、表空间级别的锁,这是InnoDB存储引擎层不能直接实现的锁。

但与InnoDB锁的实现一样,MDL锁也是类似对一颗树的各个对象从上至下进行加锁(对树进行加锁具体见:《MySQL技术内幕:InnoDB存储引擎》)。但是MDL锁对象的层次更多,简单来看有如下的层次:

 

12

上图中显示了最常见的4种MDL锁的对象,并且注明了常见的SQL语句会触发锁。与InnoDB层类似的是,某些类型的MDL锁会从上往下一层层进行加锁。比如LOCKTABLE … WRITE这样的SQL语句,其首先会对GLOBAL级别加INTENTION_EXCLUSIVE锁,再对SCHEMA级别加INTENTION_EXCLUSIVE锁,最后对TABLE级别加SHARED_NO_READ_WRITE锁。

这里最令人意外的是还有COMMIT对象层次的锁,其实这主要用于XA事务中。比如分布式事务已经PREPARE成功,但是在XACOMMIT之前有其他会话执行了FLUSHTABLES WITH READ LOCK这样的操作,那么分布式事务的提交就需要等待。

除了上图标注的对象,其实还有TABLESPACE、FUNCTION、PROCEDURE、EVENT等其他对象类型,其实都是为了进行并发控制。只是这些在MySQL数据库中都不常用,故不再赘述(当然也是为了偷懒)。

目前MDL有如下锁模式,锁之间的兼容性可见源码mdl.cc:

13

MDL锁的性能与并发改进

讲到这同学们会发现MDL锁的开销并不比InnoDB层的行锁要小,而且这可能是一个更为密集的并发瓶颈。MySQL5.6和5.5版本通常通过调整如下两个参数来进行并发调优:

  • metadata_locks_cache_size: MDL锁的缓存大小
  • metadata_locks_hash_instances:通过分片来提高并发度,与InnoDB AHI类似

MySQL 5.7 MDL锁的最大改进之处在于将MDL锁的机制通过lock free算法来实现,从而提高了在多核并发下数据库的整体性能提升。

MDL锁的诊断

MySQL 5.7版本之前并没有提供一个方便的途径来查看MDL锁,github上有一名为mysql-plugin-mdl-info的项目,通过插件的方式来查看,非常有想法的实现,大赞。好在官方也意识到了这个问题,于是在MySQL5.7中的performance_schea库下新增了一张表metadata_locks,用其来查看MDL锁那是相当的方便:

不过默认PS并没有打开此功能,需要手工将wait/lock/metadata/sql/mdl监控给打开:

([email protected]) [performance_schema]> update? setup_instruments

-> set enabled=’yes’,timed=’yes’? where name = ‘wait/lock/metadata/sql/mddl’;

Query OK, 0 rows affected (0.00 sec)

文:姜承尧

原文出处:InsideMySQL

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

  1. yixiu说道:

Copyright ? 2012-2017 www.vjxu0.cn - 运维派 - 粤ICP备14090526号-3
扫二维码
扫二维码
返回顶部
  • 太原35397名考生参加中考体测 2019-06-21
  • 让榜样的力量永恒传承 2019-06-21
  • 谈具体的吧,别装模作样了。客观事实与观察事实、科学事实有什么不同? 2019-05-14
  • 民航援助西藏机场群建设项目启动 2019-05-14
  • 腰痛分四型 对照一下你是哪一种? 2019-05-11
  • 曾祖父、曾祖母、祖父、祖母、父亲、母亲、重孙。一家7人,如果两家联姻,两家共十四人,请问:“看着就想笑”你那15人是咋算出来的? 2019-05-11
  • 光是一个梨子的滋味就改变了方向,说讲事实摆道理,就是要你按他的指挥棒转,属于忽悠网友的口实 2019-05-05
  • 全国首列“研学旅行专列”兰州启程 2019-05-05
  • 台东鹿野返乡青年“阿山哥”的农夫梦 2019-05-02
  • 大力弘扬革命传统传承红色基因 持续深化作风建设造福老区人民 2019-04-26
  • 青杠坡镇:“春耕齐忙”贫困户脱贫有门路 2019-04-09
  • 客观事实及其规律是一切理论的基础,任何理论都是客观事实及其规律的反映,它们只有符合客观事实及其规律才是正确的,否则便是错误的。 2019-03-30
  • vivo韩伯啸:息屏下屏幕指纹解锁无压力 2019-03-19
  • 全国妇联新时代“巾帼志愿者暖心故事” 网络展播揭晓仪式 2019-03-01
  • 呼伦贝尔大草原,我们来啦! 2019-03-01
  • 期波叔特码 浙江体彩6+1走势综合版 13273期排列5 广西好运快3开奖结果 北京赛车正确实用各式技巧心得大全 qq游戏十三水哪下载 铜墙铁壁平特一码 四川快乐1225号开奖号 任选9场奖金公布时间 加拿大西快乐8开奖结果 独家来料 广东26选5最新开奖结果查询 福建快三预测 极速快乐十分下载 体育彩票36选7开奖号码