waiting for table metadata lock的一种解决方法

2019-08-10 16:05:00 浏览数 (1)

问题描述

对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即可释放其占有的元数据锁,后续阻塞的操作将会正常继续

0 人点赞