Metadata Lock原理5
分类: MySQL
和MySQL打交道比较多的朋友,肯定遇到过 "Waiting for table metadata lock"或者由于MDL导致的故障,不过本文介绍MDL锁之前 我们先看一个著名的bug#989 大致情况如下:
s1:
BEGIN;
INSERT INTO t ... ;
COMMIT;
s2:
DROP TABLE t;
然后上面的操作流程在binlog记录的顺序是
DROP TABLE t;
BEGIN;
INSERT INTO t ... ;
COMMIT;
很显然备库执行binlog时会先删除表t,然后执行insert 会报1032 error,导致复制中断。为了解决该bug,MySQL 在5.5.3引入了MDL锁。
二 metadata lock是什么
顾名思义,metadata lock即元数据锁。在数据库中元数据即数据字典信息包括db,table,function,procedure,trigger,event等。metadata lock主要为了保证元数据的一致性,用于处理不同线程操作同一数据对象的同步与互斥问题,如:
- s1: begin select * from t1 for update ...
- s2: begin alter table t1 add column str varchar(30)
在以上两个事务中,s1 s2都会操作表t1,但由于s1首先获取t1的锁,而s2在获得锁的时候由于互斥,所以只能等待;
其实5.5也有类似保护元数据的机制,只是没有明确提出MDL概念而已。但是5.5之前版本(比如5.1)与5.5之后版本在保护元数据这块有一个显著的不同点是,5.1对于元数据的保护是语句级别的,5.5对于metadata的保护是事务级别的。所谓语句级别,即语句执行完成后,无论事务是否提交或回滚,其表结构可以被其他会话更新;而事务级别则是在事务结束后才释放MDL。引入MDL后,主要解决2个问题
事务隔离问题,比如在可重复隔离级别下,会话A在2次查询期间,会话B对表结构做了修改,两次查询结果就会不一致,无法满足可重复读的要求.
数据复制问题,比如会话A执行了多条更新语句期间,另外一个会话B做了表结构变更并且先提交,就会导致slave在重做时,先重做alter,再重做update时就会出现复制错误的现象。也就是简介中提到的bug。
三 小结
本文浅显的介绍MDL的来龙去脉,想比较详细的了解MDL的前生今世的读者请移步@印风的文章 《MySQL metadata lock的前世今生(5.1=>5.7)》
MySQL引入MDL之后 也会带来一定的负面影响 比如 “wait for global read lock”或者“wait for table lock”之类的锁等待,当遇到大查询,同时遇到一个DDL ,基本能造就一个故障了。后面的文章会深入介绍MDL的实现原理和运行机制,加入一些常见的案例和解决方法。
转载于:https://www.cnblogs.com/zengkefu/p/5673930.html
Metadata Lock原理5相关推荐
- Metadata Lock原理2
同事说开发机更改一个表结构,加字段,但是一直挂在那里,没反应.一开始以为表测试数据量很大,因为mysql增加表字段会重写表,后来看了下数据量很小,就另外查看过程.原因分析和处理如下: 一.环境 ...
- 架构师技能6:深入MySQL原理-Waiting for table metadata lock引发系统崩溃
开篇语录:以架构师的能力标准去分析每个问题,过后由表及里分析问题的本质,复盘总结经验,并把总结内容记录下来.当你解决各种各样的问题,也就积累了丰富的解决问题的经验,解决问题的能力也将自然得到极大的提升 ...
- mysql metadata lock(二)
上一篇<mysql metadata lock(一)>介绍了为什么引入MDL,MDL作用以及MDL锁导致阻塞的几种典型场景,文章的最后还留下了一个小小的疑问.本文将更详细的介绍MDL,主要 ...
- java连接mysql执行ddl_Mysql 执行DDL导致Waiting for table metadata lock
MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...
- java lock的原理,Java中Lock原理探究
在对于lock锁的使用上,很多人只是掌握了最基础的方法,但是对实现的过程不是很清楚.这里我们对lock锁功能的实现进行分析,以ReentrantLock为例,分析它的锁类型,并对相关的调用方法进行展示 ...
- 【MySQL经典案例分析】 Waiting for table metadata lock
本文由云+社区发表 一. 问题是这样来的 2018年某个周末,接到连续数据库的告警,告警信息如下: 二. 苦逼的探索过程 1.总体的思路 看到too many connection的报错信息,基本 ...
- mysql metadata lock(一)
想必玩过mysql的人对Waiting for table metadata lock肯定不会陌生,一般都是进行alter操作时被堵住了,导致了我们在show processlist 时,看到线程的状 ...
- Mysql 死锁过程及案例详解之元数据锁MetaData Lock
Mysql数据锁MetaData Lock 元数据锁MetaData Lock 元数据锁MetaData Locks的主要作用是在执行查询或者发起事务时元数据结构受到保护,即不被修改. MetaDat ...
- Waiting for table metadata lock
[问题描述]:Mysql5.6的主从环境,在主库上添加字段始终添加不了,一直没有返回值. [排查分析]: 1.在测试环境上执行没有问题,很快就返回.因为数据量不大,也就10w左右(线上也是10w左右) ...
- MySQL出现Waiting for table metadata lock的原因以及解决方法
MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...
最新文章
- 线性代数同济第六版_线性代数考试内容与课后习题
- 第一次作业:项目范围管理论文的提纲
- java自定义键值对_KV键值对数据类型
- 罗技键盘linux,logiops,在 Linux下设置罗技鼠标的按键和手势
- 激动人心!柳叶刀杂志执行主编回柳叶刀烧烤吃烧烤了!
- UIView转换为UIImage
- 简单php网站的mysql优化小结
- linux 监控软件介绍,Linux中系统整体性能监控工具详细介绍
- Android电视远程桌面,180元让电视变电脑 远程桌面终端评测
- 计算机组成白中英答案,计算机组成原理白中英答案
- 关于webstorm更换主题
- selenium2 原理和常用api
- OpManager-企业网络问题分析及故障排除
- 传统的企业数据总线(ESB)和目前的分布式消息系统有什么区别?两者的关系是?
- java 读书笔记_《java编程思想》读后感
- 【转】偷偷告诉你快速提高app下载量和安装量
- matlab与maple互联,Maple与Matlab
- pku 1013 解题报告
- 4、<VBA>学习用刘永富老师插件解析JSON格式数据
- 关于前端上传文件到七牛云的一些笔记
热门文章
- 前端能改变session吗_编程真的能改变思维方式吗?「渡一教育」
- 查看另外一台机器的docker情况 监控性能管理docker 配置Docker Daemon
- 区块链 Fisco bcos 智能合约(12)-Solidity的高级特性
- ios低版本、微信浏览器低版本 不能使用的js语法总结
- PHP二维数组按照指定的字段排序的函数
- vc c mysql_VC++ 利用 MySQL connector c 访问MySQL 数据库
- python判断是否为素数的函数 是返回字符串yes_编写函数,判断一个数字是否为素数,是则返回字符串 YES ,否则返回字符串 NO 。_学小易找答案...
- webService发布在IIS服务器上
- mysql的执行局计划
- 2020-07-02