我是靠谱客的博主 清爽面包,最近开发中收集的这篇文章主要介绍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 found when trying to get lock; try restarting transaction问题描述:原因分析:解决方案:巨人的肩膀:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部