mysql-ddl-锁表

本文详细介绍了在MySQL中执行altertable等DDL操作时遇到的'WaitingforTableMetadataLock'等待现象,以及由此导致的对表的所有操作(包括读取)被阻塞的情况。主要分析了三种可能的场景:长事务运行、未提交事务和失败的事务操作,并提供了检查和解决此类问题的方法。
摘要由CSDN通过智能技术生成

记一次alter table(DDL)操作时的waiting for tabl matadata lock错误

基本内容转自:https://www.cnblogs.com/digdeep/p/4892953.html
MySQL在进行alter table等DDL操作,会出现Waiting for table metadata lock的等待场景。而且,一旦alter table TableA的操作停滞在Waiting for table metadata lock的状态,后续对TableA的任何操作(包括读)都无法进行,因为他们也会在Opening tables的阶段进入到Waiting for table metadata lock的锁等待队列。如果是产品环境的核心表出现了这样的锁等待队列,就会造成灾难性的后果。

场景1:长事务运行,阻塞DDL,继而阻塞所有同表的后续操作(show processlist)
场景2:未提交事务,阻塞DDL,继而阻塞所有同表的后续操作(select * from information_schema.innodb_trx\G;)
场景3:通过show processlist看不到TableA上有任何操作,在information_schema.innodb_trx中也没有任何进行中的事务。这很可能是因为在一个显式的事务中,对TableA进行了一个失败的操作(比如查询了一个不存在的字段),这时事务没有开始,但是失败语句获取到的锁依然有效,没有释放。(从performance_schema.events_statements_current表中可以查到失败的语句。)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值