MySQL笔记-MDL锁(metadata lock)
发布日期:2021-06-30 10:43:04 浏览次数:3 分类:技术文章

本文共 681 字,大约阅读时间需要 2 分钟。

MySQL5.5版本引入了MDL锁(metadata lock),用于解决或保证DDL操作与DML操作之间的一致性。在mysqldump的时候不能做DDL操作,会提示waiting for table metadata lock;做DDL操作没办法保护事务,因此引入了metadata lock。如下时序图:

如果没有MDL锁保护,那么session2,就会直接执行DDL操作,这样会导致session3有问题。MySQL5.5版本引入了MDL锁保护了这种情况的发生,由于session1开启了查询,那么就获得了MDL锁,锁的模式为SHARED_READ,session2要执行DDL,需要获得X锁,两者互斥,所以session2会等待。

这里有一点要注意:

做select查询就会加MDL锁。

 

这里有一点要提下,mysql中,有时候select,drop直接输入就马上生效,是因为有auto_commit参数被开启了。

下面查询下MySQL库中是否开启了自动提交:

可见autocommit为ON说明默认是开启的。

 

这里来演示下MDL锁,关于t1表的表结构:

desc t1;

数据如下:

select * from t1;

在session1中开启事务,查询:

begin;select * from t1;

在session2中删除表就会被阻塞:

begin;drop table t1;

下面来查看下进程的状态:

show processList;

从中可见drop table此时的状态为 waiting for table metadata lock

转载地址:https://it1995.blog.csdn.net/article/details/105937619 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Qt文档阅读笔记-WebEngine Content Manipulatoin Example
下一篇:MySQL笔记-死锁原理与分析及InnoDB中如何减少死锁

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月19日 20时09分33秒