Waiting for table metadata lock

当MySQL出现'Waiting for table metadata lock'状态时,可能由于未提交的事务或正在进行的DDL操作导致。MDL锁自5.5版本引入,保护表元数据一致性。常见场景包括DML操作时执行DDL、长时间查询或mysqldump时 alter 表、未提交事务执行DDL。处理方法是kill掉引起锁定的会话。
摘要由CSDN通过智能技术生成

mysql查询卡死,从navicat客户端查看“服务器监控”看到state有很多“Waiting for table metadata lock”。

我的解决方式就是kill掉“Waiting for table metadata lock”的查询。kill掉就好了。

出现问题的原因可能跟我给表加索引有关系。因为发现多表联查sql很慢,而且在这之前已经执行了多次这个sql,都没返回结果。

而此时我又去alter表,可能导致了死锁。后续的insert也堵塞在那里。

等我kill掉“Waiting for table metadata lock”的查询sql后,insert马上被消费了。

网上看到的答案:

MySQL在进行一些alter table等DDL操作时,如果该表上有未提交的事务则会出现 Waiting for table metadata lock ,而一旦出现metadata lock,该表上的后续操作都会被阻塞。

1、metadata Lock 简述
为了在并发环境下维护表元数据的数据一致性,在表上有活动事务(显式或隐式)的时候,不可以对元数据进行写入操作。

因此从MySQL5.5版本开始引入了MDL锁(metadata lock),来保护表的元数据信息,用于解决或者保证DDL操作与DML操作之间的一致性。


对于引入MDL,其主要解决了2个问题,一个是事务隔离问题,比如在可重复隔离级别下,会话A在2次查询期间,会话B对表结构做了修改,两次查询结果就会不一致,无法满足可重复读的要求;另外一个是数据复制的问题,比如会话A执行了多条更新语句期间,另外一个会话B做了表结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值