关于 MySQLTransactionRollbackException 异常的排查经历

问题

首先来看问题:一个接口无法访问,报了异常 MySQLTransactionRollbackException;

问题排查

首先想到了是不是事务死锁导致,所以查看了当前数据库的事务状态,果然有一个事务已经开启两个小时了没有关闭。
在这里插入图片描述

问题分析

其实这个接口并发量并不高,无非前端可能出现连续点击的问题,所以我想事务死锁应该是这样发生的:请求接口,当进行数据库事务提交的时候,发现事务 version 重复,这个时候等待,等待超时,需要回滚,回滚失败,导致事务一直等待,所以导致后面的请求全部死锁。(至于事务到底为什么会出现回滚失败问题,确实不太清楚,还请各位大佬指点)

解决办法

解决办法非常简单,就是给这段操作加上分布式锁,网上分布式锁的教程有很多,这里就不贴代码了,我用的是 Redisson。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值