mysql5.7的online ddl体验

2020-05-17  本文已影响0人  frankie_cheung

在读本文章前,您需要知道如下知识点

当然不知道也没关系,我们也会讲到这个知识。

一·元数据锁

首先确定什么是元数据锁

另一类表级的锁是 MDL(metadata lock)。MDL 不需要显式使用,在访问一个表的时候会被自动加上。MDL 的作用是,保证读写的正确性。你可以想象一下,如果一个查询正在遍历一个表中的数据,而执行期间另一个线程对这个表结构做变更,删了一列,那么查询线程拿到的结果跟表结构对不上,肯定是不行的

元数据锁是server层面的锁,也是表级锁,主要分为如下两类:

对上述结论的解释:

二·做实验

如上实验结论:
数据库有事务在查询或者写入某个表,但是还没有提交事务,你这个时候去alter table 则你这个alter操作将被阻塞,然后后续的查询操作也将被阻塞,假如你的这个alter table操作很久时间,那么后续的查询都需要等你,有时候千万级别的表 alter 操作很耗时的,所以这样对于生产环境而言肯定是不行的,后端开发可能获取到如下错误信息 Error Code: 2013. Lost connection to MySQL server during query

begin;  #显式开启事务
alter table t2 change  column  b newb int(11); #进行alter操作
但是我没有commit 按道理说此时这个元数据写锁应该未释放,但是在另一个会话中,
select * from t2; 
不阻塞,直接查询出数据了,那位大佬可以解释一下该情况,有点懵逼~
三·在线DDL /online ddl

我发现对在线DDL理解错了,我需要再看看文档才能写完这个文章。以及解决一下为啥元数据读锁我没有提交事务,就释放的问题。

上一篇下一篇

猜你喜欢

热点阅读