问题描述
对MySQL进行alter table等DDL操作时,有时会发现对某个表的任何操作都被阻塞,包括读,报错如下图所示
然后show process list可以看到大量的Waiting for table metadata lock的等待场景。
代码语言:txt复制select * from information_schema.processlist order by time desc limit 10;
原因分析
这种现象的一个可能的原因是某个事务持有着这个表的元数据锁,需要把这个事务找出来并kill掉,使其回滚,那么alter table和其后续被阻塞的操作包括读等才会顺利进行下去。接下来我们去查询哪些事务没有提交。
代码语言:txt复制select * from INNODB_RTX order by trx_started desc limit 10G;
解决方案
找到这两个事务之后,kill即可释放其占有的元数据锁,后续阻塞的操作将会正常继续