解决MySQL满屏在报“Waiting for the table metadata lock”的错误

       因为公司是做网络安全的,所以会对平时设备收到的日志以对应的规则集进行解析然后存入数据库。涉及大数据,与数据库的交互量大概是3000条/秒,所以如果设备持续收日志的话,一般两天时间数据库对应表的存放的数据量大概就有5、6亿条。

      有一天我突然发现后台的日志信息一直再报“队列已满”的错误信息,到数据库查询相应表的数据发现其入库的数据量也是停留在之前的数量(此时该表的数据量已经有大概1亿多条了,该信息是为下文作铺垫的)。按照以往的经验我将可能会出现的问题挨个排查了一遍,发现都没有问题,最后我在对应的数据库查看了一下该库的 线程运行 情况,情况如下 :

 

入库的insert语句一共有四条线程在执行,就报了四个“Waiting for the table metadata lock”的错误,表居然被锁了,试着kill掉,可是死了马上就活了,刚开始也不懂,看到表被锁了就没有继续往下看(最关键的信息被忽略了),后问了一下公司的前辈,上图的表中我遗漏了这么一项重要的信息:

经过前辈讲解我才恍然大悟。

原来在数据批量入库的时候,组内的另一个哥们发现前台对于日志信息的查询速度有点慢,所以他的想法就是给表中他要查的字段手动加索引“Alter table 'sim_event add index ...'”,(MySQL给字段添加索引的语句ALTER TABLE <表名> ADD INDEX (<字段>))可是他犯另一个大错误就是这个表现在差不多有1亿多数据,要想成功添加得等到猴年马月了,而对于MySQL而言,如果进行一些Alter table等DDL操作时,如果该表上有未提交的事务就会报Waiting for the table metadata lock的错误。

      最后重新启动数据库,kill掉不必要的线程(其实重启就好了),入库就正常了!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值