记一次waiting for table metadata lock的问题

记一次修改表产生waiting for table metadata lock锁的问题;

今天为表增加个自增主键过程中被锁住,首先我查看了一下线程

show full processlist;

确实看到状态为waiting for table metadata lock

但是从线程中并没有发现有同一表的修改或者其他操作来锁住表

想着可能有未提交的事务锁住表,如果有将其kill掉即可

记一次waiting for table metadata lock的问题

但是结果显示为空,百思不得其解,然后查到了大佬的文章,这很可能是因为在一个显式的事务中,对TableA进行了一个失败的操作(比如查询了一个不存在的字段),这时事务没有开始,但是失败语句获取到的锁依然有效,没有释放。从performance_schema.events_statements_current表中可以查到失败的语句。

进行如下查询

 select * from performance_schema.events_statements_current\G

记一次waiting for table metadata lock的问题

 这是因为程序中运行着这个查询,报错后没有释放,关掉连接后恢复正常(顺便吐槽一下这个破编辑器)

处理方法:通过performance_schema.events_statements_current找到其sid, kill 掉该session. 也可以 kill 掉DDL所在的session.

大佬链接:https://www.cnblogs.com/digdeep/p/4892953.html