1.出现场景
一个同事在执行一个代码的时候,对A表进行大量的查询,我在这时候,正好需要对这个表中的某一个的字段进行相应的修改,也就是 alert table 的操作,我在执行的时候,发现数据库卡住了,然后执行强制退出了数据库的链接工具,在进去数据库的时候,就发现了大量的sql语句发生了阻塞的问题。
出现了这种 Waiting for table metadata lock的等待场景,导致了后台服务查询缓慢,卡住。
2.原因分析
因为 alter table的时候导致锁表,查询的时候,就进行了排队,发生了阻塞,当程序强制退出的时候,就又是的刚才alter table的事务没有提交,导出一直发生阻塞,造成了大量的进程发生了阻塞 。
3.解决方式:
1.show processlist
发现ALTER TABLE这条语句导致大量查询语句处于等待状态
2.kill processid 将处于处于等待的进程杀掉!
3.再次查询的时候就不会阻塞了
4.如果在解决不了 直接重启一下数据库!