我是靠谱客的博主 清爽面包,这篇文章主要介绍20201016-MYSQL死锁问题分析Deadlock found when trying to get lock; try restarting transaction问题描述:原因分析:解决方案:巨人的肩膀:,现在分享给大家,希望可以做个参考。
问题描述:
测试环境中财务服务对RabbitMQ消息进行消费时,出现异常
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
原因分析:
从上面截图可以看出是发现了mysql的死锁问题
到测试库上执行如下脚本
show engine innodb status;
找到事务1,事务2对应的SQL语句
查找依据:
- SQL语句,根据LATEST DETECTED DEADLOCK提供的死锁时记录的sql语句。
- 线程ID(mysql的唯一标识): MySQL thread id 7102060(事务1被回滚)
- 7102091(事务2)执行时间(时间线):2020-10-16 15:17:08 7ff6fabe3700
解决方案:
经分析,测试库使用的事务级别是REPEATABLE-READ,为了解决幻读(也不是完全解决,要完全解决是使用串行化事务级别),因为要更新的语句中where里的字段都没有索引,所以其使用的是间隙锁,如果两个并发请求进来,需要更新的是相邻的记录,就会出现死锁。
所以有可能出现相邻记录并发更新的情况时,需要将方法设置为同步;
巨人的肩膀:
https://www.jianshu.com/p/6049b046e7b4
https://www.cnblogs.com/hunternet/p/11383360.html
http://blog.sina.com.cn/s/blog_a1e9c7910102vnrj.html
https://www.cnblogs.com/rainy-shurun/p/5166163.html
最后
以上就是清爽面包最近收集整理的关于20201016-MYSQL死锁问题分析Deadlock found when trying to get lock; try restarting transaction问题描述:原因分析:解决方案:巨人的肩膀:的全部内容,更多相关20201016-MYSQL死锁问题分析Deadlock内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复