Deadlock found when trying to get lock; try restarting transaction

news2024/10/3 8:23:54

报错详情

Error updating database.  Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction

The error may involve com.iss.cms.fdrb.common.dao.entity.InterfaceQueue.updateInterfaceQueue-Inline

The error occurred while setting parameters

SQL: update t_fdrb_interface_queue t  set       t.send_status = ?,       t.update_time = ?       where tenant_id = ? and biz_code= ? and biz_id = ? and send_status in (1,3)

Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction

; Deadlock found when trying to get lock; try restarting transaction; nested exception is com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:267)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate

MySql锁类型的介绍

上面是MySql锁表的问题报错日志,今天记录一下解决方案。

  1. 行级锁在使用的时候并不是直接锁掉这行表记录,而是锁索引
  2. 如果一条Sql用到了主键索引的话,mysql会锁住这条记录主键索引
  3. 如果一条Sql用到了非主键索引,mysql会先锁住非主键索引,然后再锁定主键索引

原理

mysql的两情况的锁,排它锁与共享锁。

  1. 排它锁是事务T对数据A加上排他锁,只能允许事务T读取和修改数据A,别的事务没有办法进行读取与修改的操作处理,所以叫做排他锁,是互斥的
  2. 共享锁是事务T对数据A加上共享锁,其他事务只能再对数据A加上共享锁,而不能进行排它锁的操作,别的事务也可以加上共享锁。是不会进行互斥的

一般造成死锁的原因是因为两个事务添加了锁的时候没有及时进行释放锁资源,等到第二个事务要添加排他锁的时候,发现已经被锁了,从而导致的环路等待,构成死锁

问题的排查过程

日志定位可以找到具体的表是什么,然后定位这

从表里面可以发现进行更新的时候,没有用到索引,而是使用两个非索引,类似聚合索引的方式进行更新的处理。

问题的解决方案

针对这种情况,需要进行调整,先查询出来这一条记录,然后根据主键来进行更新的操作即可。

调整前的sql

update t_fdrb_interface_queue${tableNo} t  set

      t.send_status = #{sendStatus},

      t.update_time = #{updateTime}

   where tenant_id = #{tenantId} and biz_code= #{bizCode} and biz_id = #{bizId} and send_status in (1,3)

调整后的sql

第一步:查询

select

  t.biz_code as bizCode,

  t.biz_id as bizId,

  t.send_status as sendStatus,

  t.create_time as createTime,

  t.update_time as updateTime,

  t.send_num as sendNum,

  t.send_Lang as sendLang,

  t.id as id

from  t_fdrb_interface_queue${tableNo} t

where t.tenant_id = #{tenantId} and t.biz_code= #{bizCode} and biz_id = #{bizId} and send_status in (1,3)

第二步:更新

update t_fdrb_interface_queue${tableNo} t  set

        t.send_status = #{sendStatus},

        t.update_time = #{updateTime}

where  id= #{id}

这里备注一下,后续在操作更新的操作时,要使用索引进行更新,避免死锁的情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54120.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库、计算机网络,操作系统刷题笔记6

数据库、计算机网络,操作系统刷题笔记6 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle&…

RK3588平台开发系列讲解(Thermal篇)Thermal介绍及用法

平台内核版本安卓版本RK3588Linux 5.10Android12🚀返回专栏总目录 文章目录 一、Thermal介绍二、相关代码路径三、用户态接口说明四、常见问题4.1 关温控4.2 获取当前温度沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍Thermal的相关内容及调试手段。 一…

环境配置之终端WezTerm

前言 其实是在复习的过程中发现终端非常别扭,了解了一些大佬的使用方式后,尝试使用一个多平台的终端应用。 环境配置 之前在MAC上使用过的终端包括ZenTermLite和Item2,这次使用一个跨平台的终端WezTerm! 缺点就是自定义的地方太…

JUC并发编程第七篇,volatile凭什么可以保证可见性和有序性?我们该如何正确使用它?

JUC并发编程第七篇,volatile凭什么可以保证可见性和有序性?我们该如何正确使用它?一、volatile的作用是什么?二、什么是内存屏障?三、四大内存屏障指令源码解析!四、volatile如何通过内存屏障保证可见性和有…

Spring MVC数据绑定和表单标签的应用(附带实例)

为了让读者进一步学习数据绑定和表单标签,本节给出了一个应用范例 springMVCDemo04。该应用中实现了 User 类属性和 JSP 页面中表单参数的绑定,同时在 JSP 页面中分别展示了 input、textarea、checkbox、checkboxs、select 等标签。 应用的相关配置 在…

解析csv文件,读取百万级数据

最近在处理下载支付宝账单的需求,支付宝都有代码示例,功能完成还是比较简单的,唯一的问题就在于下载后的文件数据读取。账单文件可大可小,要保证其可用以及性能就不能简单粗暴的完成开发就行。 文件下载是是csv格式,此…

干货|成为优秀软件测试工程师的六大必备能力

“软件吞噬世界”、“软件定义一切”。随着软件行业的迅速发展,保障软件质量的关键环节——软件测试也变得越来越重要。而执行测试工作的测试工程师,便是软件质量的把关者。 测试工程师早在2005年就被劳动和社会保障部门列入第四批新职业中。经过短短几…

文件批量从gbk转成utf8的工具

工具名:GB/BIG5/UTF-8 文件编码批量转换程序 下载地址: https://www.wenjiangs.com/wp-content/uploads/2018/05/GB2UTF8.zip 程序功能:将 GB、BIG5、UTF-8 文件相互转换,方便的批量处理能力,主要用于网站文件编码方式…

单商户商城系统功能拆解41—应用中心—用户储值

单商户商城系统,也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法,例如拼团,秒杀,砍价,包邮…

R语言进行相关矩阵分析及其网络可视化

数据准备 # 选择感兴趣的列 mydata <- mtcars %>% select(mpg, disp, hp, drat, wt, qsec) # 添加一些缺失值 mydata$hp[3] <- NA # 检查数据 head(mydata, 3) ## mpg disp hp drat wt qsec ## Mazda RX4 21.0 160 110 3.90 2.62 16.5 ## Ma…

基于WiFi小车控制板的单片机小系统原理图

小系统&#xff0c;指的是的用少的元件组成的单片机可以工作的系统。一般在设计小系统的时候分为这四种必要的电路&#xff0c;分别是1、电源供电电路;2、单片机复位电路;3、时钟振荡电路;4、程序的下载接口电路。这次基于我们研发的WiFi小车51核心控制板的小系统原理图来讲一下…

uni-app实现支付及项目打包上传

本文主要介绍uni-app项目中如何实现支付功能&#xff08;支付宝支付、微信支付&#xff09;&#xff0c;及项目如何打包上传。 一、实现支付 前置工作&#xff0c;项目要实现支付功能&#xff0c;首先要在根目录manifest.json文件内App模块配置中进行设置。 其中&#xff0c;a…

机构运动学分析

背景介绍 空间机构具有结构紧凑、运动灵活等特点&#xff0c;在航空航天、精密仪器以及工业设备等领域具有广泛的应用。调研发现&#xff0c;机械臂一般采用伺服电机作为动力源&#xff0c;通过空间连杆驱动末端执行器&#xff0c;大大的减轻了工人的劳动强度。本节中主要是针对…

iconfont小图标从下载到引入到vue项目中的详细教程

地址&#xff1a;iconfont-阿里巴巴矢量图标库 iconfont小图标下载&#xff1a; &#xff08;1&#xff09;查找图标 在搜索框直接文字搜索或者看下面的小图标库&#xff0c;找想要的&#xff0c;每个小图标库都有一个名字&#xff0c;比如&#xff1a;“阿里云官网”&#x…

Vue2中$set的使用

一、什么场景下使用$set set为解决Vue2中双向数据绑定失效而生&#xff0c;只需要关注什么时候双向数据绑定会失效就可以了。 例如&#xff1a; 1.利用数组中某个项的索引直接修改该项的时候 arr[indexOfItem] newValue 2.直接修改数组的长度的时候 arr.length newLength …

gRPC学习笔记(一)

文章目录gRPC初学思维导图异步多函数多类的调用grpc初学总结&#xff1a;杂项gRPC初学思维导图 异步多函数多类的调用 一个类里有多个方法时&#xff0c; 两种方法&#xff1a; 定义不同的类&#xff08;推荐&#xff0c;只管自己的实现&#xff0c;换了请求类型&#xff0c;…

在linux系统上看全世界新闻 -- Clinews的使用详解

一. Clinews介绍 Clinews 和 InstantNews 类似&#xff0c;都是 Linux 命令行下的新闻客户端&#xff0c;安装及配置 Clinews 后就可以在 Linux 命令行下阅读新闻及头条新闻了&#xff0c; 当然还有博客新闻&#xff0c;不需要安装 GUI 应用或移动应用&#xff0c;轻松在 Linu…

值得收藏的30道Python练手题(附详解)

今天给大家分享30道Python练习题&#xff0c;建议大家先独立思考一下解题思路&#xff0c;再查看答案。 1.已知一个字符串为 “hello_world_yoyo”&#xff0c;如何得到一个队列 [“hello”,”world”,”yoyo”] &#xff1f; 使用 split 函数&#xff0c;分割字符串&#xf…

2022年最热门的短网址整理,让你不再选择恐惧

转眼一年又过去了&#xff0c;最近发现网络上有各种各样的短网址平台&#xff0c;让人眼花缭乱&#xff0c;都声称免费并且功能强大&#xff0c;但是据我的了解&#xff0c;很多免费的短网址都是有使用上的限制的&#xff0c;比如生成条数、访问次数、有广告等等、还有各种各样…