记一次waiting for table metadata lock的问题
记一次修改表产生waiting for table metadata lock锁的问题;
今天为表增加个自增主键过程中被锁住,首先我查看了一下线程
show full processlist;
确实看到状态为waiting for table metadata lock
但是从线程中并没有发现有同一表的修改或者其他操作来锁住表
想着可能有未提交的事务锁住表,如果有将其kill掉即可
但是结果显示为空,百思不得其解,然后查到了大佬的文章,这很可能是因为在一个显式的事务中,对TableA进行了一个失败的操作(比如查询了一个不存在的字段),这时事务没有开始,但是失败语句获取到的锁依然有效,没有释放。从performance_schema.events_statements_current表中可以查到失败的语句。
进行如下查询
select * from performance_schema.events_statements_current\G
这是因为程序中运行着这个查询,报错后没有释放,关掉连接后恢复正常(顺便吐槽一下这个破编辑器)
处理方法:通过performance_schema.events_statements_current找到其sid, kill 掉该session. 也可以 kill 掉DDL所在的session.