mysql metadata lock
2024-10-18 20:31:53
想必玩过mysql的人对Waiting for table metadata lock肯定不会陌生,一般都是进行alter操作时被堵住了,导致了我们在show processlist 时,看到线程的状态是在等metadata lock。本文会对mysql 的metadata lock做一个小小的总结,希望对大家有所帮助。
MDL是在5.5才引入到mysql,之前也有类似保护元数据的机制,只是没有明确提出MDL概念而已。但是5.5之前版本(比如5.1)与5.5之后版本在保护元数据这块有一个显著的不同点是,5.1对于元数据的保护是语句级别的,5.5对于metadata的保护是事务级别的。所谓语句级别,即语句执行完成后,无论事务是否提交或回滚,其表结构可以被其他会话更新;而事务级别则是在事务结束后才释放MDL。
引入MDL后,主要解决了2个问题,一个是事务隔离问题,比如在可重复隔离级别下,会话A在2次查询期间,会话B对表结构做了修改,两次查询结果就会不一致,无法满足可重复读的要求;另外一个是数据复制的问题,比如会话A执行了多条更新语句期间,另外一个会话B做了表结构变更并且先提交,就会导致slave在重做时,先重做alter,再重做update时就会出现复制错误的现象。
5.5以后,什么情况下会碰到MDL锁,我结合实际情况举3个会出现MDL的场景,来分析MDL加锁时机。下文的.测试都是以mysql 5.5这个版本为基准,没有考虑到online ddl,下一篇博文会详细介绍5.6的online ddl。
最新文章
- jackson简单使用,对象转json,json转对象,json转list
- Linux服务器配置多台虚拟主机
- tomcat:域名指向项目名
- MVVM架构~knockoutjs系列之扩展ajax验证~验证数据是否存在
- webpack.optimize.CommonsChunkPlugin插件的使用
- Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError
- HDELETE
- SQLSERVER 脚本转MYSQL 脚本的方法总结
- 第一课 opengl简介
- c# 自己制作一个简单的项目倒计时器
- MySQL中,修改表的某一字段的部分值
- WPF ;GroupBox ;样式分享
- Zabbix 2.2.x, 3.0.x SQL注射漏洞修复方法
- eclipse ctrl shift t 失效的恢复方法
- 【转载】Spark学习——spark中的几个概念的理解及参数配置
- Nodejs.Electron(Nodejs的图形界面开发)安装和试用
- 树莓派3B+(二)
- js获取response头信息
- (二叉树 BFS DFS) leetcode 104. Maximum Depth of Binary Tree
- CodeForces 516C Drazil and Park 线段树