我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL5.6与MySQL5.7中语句lock table ...read加锁的区别有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL5.6与MySQL5.7中语句lock table ...read加锁的区别有哪些

小编给大家分享一下MySQL5.6与MySQL5.7中语句lock table ...read加锁的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

背景:最近在测试lock table xxx read与DML之间的锁等待测试,突然发现mysql5.6与mysql5.7的show full processlist与show engine innodb status \G的显示不相同
一个为 wait for table lock 而另外一个则是waiting for table metadata lock,甚是费解,于是就去追查了下 。

现象描述:
1.MySQL5.6
SESSION 1:


SESSION 2:


show full processlist与show engine innodb status \G的输出(显示为waiting for table level lock)



2.MySQL 5.7
SESSION 1:


SESSION 2:


show full processlist与show engine innodb status\G(显示为waiting for table metadata lock)





分析:
在MySQL5.6中,我们从show engine innodb status以及show full processlist中都能看到状态为waiting for table level lock,说明是一个事物表级锁
而在MySQL5.7中,我们只从show full processlist看到了锁等待,是waiting for table metadata lock,说明这是一个metadata lock(元数据锁)而不是一个事物锁
按本人对5.6理解是,session1语句lock table locktest1 read在MDL阶段会加上MDL_SHARED_READ,而session2的update语句在MDL阶段会加MDL_SHARED_WRITE,因此在MDL阶段不会冲突,接下来,session1会在locktest1表上上S锁(表锁),而session2会在locktest1表上加IX锁,由于IX锁与session1的表级锁S锁冲突,故而在等待,结果为waiting for table level lock;然而如下5.7的显示是waiting for metadata lock,是发生在MDL阶段的锁等待,这让我很费解,是MySQL5.7锁机制改变了呢?还是oracle官方的一个显示bug(按理来说,oracle不会出现这么低级的错误)?
从mysql5.7.3起,在performance_schema库中新增了metadata_locks表,用来监控MDL(metadata lock)的锁情况,我们来追踪一下:


从图中,我们看出,MySQL5.7对于lock table locktest1 read 加的是SHARED_READ_ONLY(而MySQL5.7新增的类型),与update语句的SHARED_WRITE互斥,导致了update在MDL阶段等待,所以状态为waiting for table metadata lock。
那为什么SHARED_READ_ONLY会与SHARED WRITE 互斥呢?我们从源代码中找出描述,如下:
 
  MDL_SHARED_READ_ONLY,

即:  MDL_SHARED_READ_ONLY会阻止所有的并发修改,(包括数据以及元数据)。

看完了这篇文章,相信你对“MySQL5.6与MySQL5.7中语句lock table ...read加锁的区别有哪些”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL5.6与MySQL5.7中语句lock table ...read加锁的区别有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录