【MySQL】 之一 2015-09-05 15:46:51

分类: 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主要为了保证元数据的一致性,用于处理不同线程操作同一数据对象的同步与互斥问题,如:

  1. s1: begin select * from t1 for update ...
  2. 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相关推荐

  1. Metadata Lock原理2

    同事说开发机更改一个表结构,加字段,但是一直挂在那里,没反应.一开始以为表测试数据量很大,因为mysql增加表字段会重写表,后来看了下数据量很小,就另外查看过程.原因分析和处理如下:  一.环境    ...

  2. 架构师技能6:深入MySQL原理-Waiting for table metadata lock引发系统崩溃

    开篇语录:以架构师的能力标准去分析每个问题,过后由表及里分析问题的本质,复盘总结经验,并把总结内容记录下来.当你解决各种各样的问题,也就积累了丰富的解决问题的经验,解决问题的能力也将自然得到极大的提升 ...

  3. mysql metadata lock(二)

    上一篇<mysql metadata lock(一)>介绍了为什么引入MDL,MDL作用以及MDL锁导致阻塞的几种典型场景,文章的最后还留下了一个小小的疑问.本文将更详细的介绍MDL,主要 ...

  4. java连接mysql执行ddl_Mysql 执行DDL导致Waiting for table metadata lock

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...

  5. java lock的原理,Java中Lock原理探究

    在对于lock锁的使用上,很多人只是掌握了最基础的方法,但是对实现的过程不是很清楚.这里我们对lock锁功能的实现进行分析,以ReentrantLock为例,分析它的锁类型,并对相关的调用方法进行展示 ...

  6. 【MySQL经典案例分析】 Waiting for table metadata lock

    本文由云+社区发表 一. 问题是这样来的 ​ 2018年某个周末,接到连续数据库的告警,告警信息如下: 二. 苦逼的探索过程 1.总体的思路 看到too many connection的报错信息,基本 ...

  7. mysql metadata lock(一)

    想必玩过mysql的人对Waiting for table metadata lock肯定不会陌生,一般都是进行alter操作时被堵住了,导致了我们在show processlist 时,看到线程的状 ...

  8. Mysql 死锁过程及案例详解之元数据锁MetaData Lock

    Mysql数据锁MetaData Lock 元数据锁MetaData Lock 元数据锁MetaData Locks的主要作用是在执行查询或者发起事务时元数据结构受到保护,即不被修改. MetaDat ...

  9. Waiting for table metadata lock

    [问题描述]:Mysql5.6的主从环境,在主库上添加字段始终添加不了,一直没有返回值. [排查分析]: 1.在测试环境上执行没有问题,很快就返回.因为数据量不大,也就10w左右(线上也是10w左右) ...

  10. MySQL出现Waiting for table metadata lock的原因以及解决方法

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...

最新文章

  1. 线性代数同济第六版_线性代数考试内容与课后习题
  2. 第一次作业:项目范围管理论文的提纲
  3. java自定义键值对_KV键值对数据类型
  4. 罗技键盘linux,logiops,在 Linux下设置罗技鼠标的按键和手势
  5. 激动人心!柳叶刀杂志执行主编回柳叶刀烧烤吃烧烤了!
  6. UIView转换为UIImage
  7. 简单php网站的mysql优化小结
  8. linux 监控软件介绍,Linux中系统整体性能监控工具详细介绍
  9. Android电视远程桌面,180元让电视变电脑 远程桌面终端评测
  10. 计算机组成白中英答案,计算机组成原理白中英答案
  11. 关于webstorm更换主题
  12. selenium2 原理和常用api
  13. OpManager-企业网络问题分析及故障排除
  14. 传统的企业数据总线(ESB)和目前的分布式消息系统有什么区别?两者的关系是?
  15. java 读书笔记_《java编程思想》读后感
  16. 【转】偷偷告诉你快速提高app下载量和安装量
  17. matlab与maple互联,Maple与Matlab
  18. pku 1013 解题报告
  19. 4、<VBA>学习用刘永富老师插件解析JSON格式数据
  20. 关于前端上传文件到七牛云的一些笔记

热门文章

  1. 前端能改变session吗_编程真的能改变思维方式吗?「渡一教育」
  2. 查看另外一台机器的docker情况 监控性能管理docker 配置Docker Daemon
  3. 区块链 Fisco bcos 智能合约(12)-Solidity的高级特性
  4. ios低版本、微信浏览器低版本 不能使用的js语法总结
  5. PHP二维数组按照指定的字段排序的函数
  6. vc c mysql_VC++ 利用 MySQL connector c 访问MySQL 数据库
  7. python判断是否为素数的函数 是返回字符串yes_编写函数,判断一个数字是否为素数,是则返回字符串 YES ,否则返回字符串 NO 。_学小易找答案...
  8. webService发布在IIS服务器上
  9. mysql的执行局计划
  10. 2020-07-02