从报错到溯源-Lock wait timeout exceeded...

这个项目是个小项目,用户比较少,但是用户在这么少的情况下,还能出现锁等待超时的问题,由于这个项目还是部署在内网的,导致每次解决问题都只能去客户那边,难受。废话不多说,直接开讲。

首先这个报这个错的原因是:假设存在事务A和事务B,事务A一直在占用着某个资源,并且这个资源被上了锁,但是事务B也想要这个资源,那么事务B就等着事务A执行完,好把锁释放掉,把这个资源让给事务B,但是这事务A执行的时间太长了,导致事务B等待的时间也就太长了,等待时间超过了MySQL中默认的锁等待时间(50s),于是就报了这个错。

看过很多博文,大部分都是说的通过下面这条语句,查询出对应的Lock wait的那一行记录,然后找出出现锁等待的那个线程,然后使用kill,将其杀死。

select * from information_schema.INNODB_TRX;

kill trx_mysql_thread_id(就是上面那条语句查出来的对应的线程id)

然而这种方式只能说暂时的解决了锁等待的问题,难道每次出现锁等待我都去杀一次?这肯定是不现实的。所以为了根本性的解决问题,我决定开始查找出现这个问题的根本原因。


项目场景:

首先,项目中有导入数据的功能,需要各个用户对自己单位的数据进行导入,那么在导入的过程中就需要频繁的更新数据,当然,多个人可以同时导入数据,那么同时导入数据,按照我们的设计,每个人去一张表中更新属于自己的那一行数据&

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值