【mysql】waiting for level lock分析与解决

线上接口出现无响应,经排查发现数据库中myisam表可能引发死锁。尽管数据库引擎显示为innodb,但部分表实际使用myisam,导致waitingforlevellock问题。清理磁盘空间并统一表引擎至innodb,同时优化查询以减少长时间锁定,解决了问题。建议减少myisam的连表操作,或改用支持行锁的innodb,并关注磁盘空间使用情况。
摘要由CSDN通过智能技术生成

问题:线上接口无响应,无法获取数据

排查:执行mysql命令show processllist查询数据库中哪些线程正在执行
在这里插入图片描述

  1. .先怀疑是数据库操作死锁了,把程序代码反复也为发现可能出现死锁的地方
  2. 后各种百度查询,看到大神的问题怀疑是数据库引擎myisam的问题(myisam读写的时候会加表锁),查看数据库引擎是innodb,这就怀疑人生了又是各种百度,看到MDL元数据锁会提示‘waiting for level lock’,但是程序中也没有执行操作更改表结构的操作呀;
  3. 又是各种百度的也未找到原因,偶然间发现线上环境的一些表引擎是myisam,而本地是innodb,真是醉了了。。。又去修改线上表引擎
  4. 另外执行linux命令df -h 发现/dev/vda1使用了98%,又去清除了一些没有用的日志文件

总结:waiting for level lock的出现在myisam引擎的数据表上面,
优化方案:
①减少查询myisam表时间比较长的连表操作,长时间查询会锁住表,其他的操作此表会出现锁等待的情况;
②粗暴一点直接修改表引擎,innodb这里需要注意的是innodb默认是支持行锁的,通过索引来加锁,如果未使用索引将会变为表锁;
另外还需注意磁盘的剩余空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值