您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

MySQL更新锁表超时(Lock wait timeout exceeded)

时间:2022-08-16 11:12:31  来源:  作者:小码code

背景

最近在做一个订单的钉钉审批功能,钉钉审批通过之后,订单更新审核状态,然后添加一条入库,并且更新入库状态:

// 订单审批通过@Transactional(rollbackFor = Exception.class) public void orderPass() {  // 更新订单审核状态  updateOrderAuditStatus(id);  // 添加入库  addPutInStorage(id);  // 更新订单入库状态  updateOrderStorageStatus(id); }

其中的添加入库是远程ERP入库,添加出库之后更新出库状态。因为ERP可能因为库存不足,会入库失败。但此时审批流程已经结束,不可能再发起一遍审批流程。当添加入库失败时订单审核状态正常更新,添加入库和更新入库状态失败。这里的解决方案是:

拆分成两个方法,一个是更新订单审核状态,另一个添加入库和更新入库状态。添加入库和更新入库状态开启一个事务,也就是添加嵌套事务 REQUIRES_NEW,REQUIRES_NEW表示无论是否有事务,都会创建一个新的事务。

修改后的代码如下:

// 订单审批通过@Transactional(rollbackFor = Exception.class)public void orderPass() {    // 更新订单审核状态    updateOrderAuditStatus(id);    try {        // 更新出库          updatePutInStorage(id);    } catch (Exception e) {        System.out.println("更新出库失败");    }}// 更新出库@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)public void updatePutInStorage(Long id) throws Exception{    // 添加入库    addPutInStorage(id);    // 更新订单入库状态    updateOrderStorageStatus(id);    System.out.println("更新出库成功");}

上面讲代码拆分成更新订单审核状态和更新入库,其中更新入库报错会被try catch异常捕获,不会影响到订单审核状态更新。而添加入库和更新订单入库状态处于同一个事务下,要么同时成功,要么同时失败。上述问题也解决了。

然而运行结果

com.MySQL.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wAIt timeout exceeded; try restarting transaction

原因分析

锁超时了,为什么会有锁呢?主要是这里添加了REQUIRES_NEW。

  • 外层事务对表的更新锁住了表的行,外层事务还没有提交,就调用了内层事务updatePutInStorage,内层事务调用了updatePutInStorage。
  • updatePutInStorage需要更新订单的入库状态,此时外层事务锁住了该表,所以更新订单的入库状态无法更新。
  • 更新订单的入库状态等待更新订单的审核状态,而REQUIRES_NEW又会让更新订单的审核状态等待更新订单的入库状态。造成相互等待,也就造成死锁。

解决方案

死锁:两个线程为了保护两个不同的共享资源而使用了两个互斥锁,那么这两个互斥锁应用不当的时候,可能会造成两个线程都在等待对方释放锁,在没有外力的作用下,这些线程会一直相互等待,就没办法继续运行,这种情况就是发生了死锁。

上面锁超时原因,就是死锁的一种原因。所以需要把更新订单审核状态方法放在最后:

// 订单审批通过@Transactional(rollbackFor = Exception.class)public void orderPass() {        try {        // 更新出库          updatePutInStorage(id);    } catch (Exception e) {        System.out.println("更新出库失败");    }    // 更新订单审核状态    updateOrderAuditStatus(id);}// 更新出库@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)public void updatePutInStorage(Long id) throws Exception{    // 添加入库    addPutInStorage(id);    // 更新订单入库状态    updateOrderStorageStatus(id);    System.out.println("更新出库成功");}

总结

  • 添加嵌套事务需要考虑到死锁的问题。
  • 一个事务只有等全部方法执行完毕之后才会提交事务。
  • 含有嵌套的事务的更新,需要按照相同的顺序更新,不然可能会出现锁相互等待的情况。

参考

业务上第一次遇到MySQL更新锁表超时( Lock wait timeout exceeded; try restarting transaction)



Tags:   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
向保险欺诈重拳出击!金融监管总局拟出台反保险欺诈工作办法
4月11日,金融监管总局下发《反保险欺诈工作办法(征求意见稿)》(下称《征求意见稿》),并面向社会公开征求意见。何谓保险欺诈?根据《征求意见稿》,保险欺诈是指利用保险合同谋取非法...【详细内容】
2024-04-12  Search:   点击:(1)  评论:(0)  加入收藏
短剧备案新规出台 风口“捞金”不确定性增加
某省旅游和文化广电体育厅《关于微短剧备案最新工作提示》的文件在网络上传播。文件称,各平台要将目前未经备案上线播出的微短剧剧目相关信息,于2024年5月31日前报所属地省级...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
陪诊师不再“三无”:上海首期培训百人,两项团体标准正起草
来源:“新民晚报”微信公众号上海陪诊师培训要开班了。消息不胫而走,这几天上海开放大学的总机电话几乎被打爆了。在上海,陪诊师还处于“灰色地带”,没有从业门槛、没有岗前培训...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
今天为何依旧需要规培?如何让规培生走好这条必经之路?
2020年,全国首档医生观察纪实节目《我的白大褂》首次聚焦了一个年轻群体——90后规培生。一则来自医学生的观后留言说道,“规培的意义,就是过渡成为一个好的临床医生...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
大学选修课如何才能受追捧
 因为没排上课,北京师范大学副教授陈志新将自己的课堂搬到网络上,免费教起了“社会科学概论”课。此举不但受到网友追捧,也引发了人们对大学选修课的关注。那么,高校的选修课通...【详细内容】
2024-04-12  Search:   点击:(1)  评论:(0)  加入收藏
单瓶跌至2500!飞天茅台价格走低,究竟是何原因?
本报记者 孙吉正 北京报道近日,飞天茅台市场售价走低成为大众关注的焦点。日前,有大量经销商反映飞天茅台开始出现市场价格跳水的情况。根据《中国经营报》记者了解,截至发稿,单...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
数字求职机亮相杭州高铁站 “刷脸”也能找工作
中新网杭州4月11日电(鲍梦妮 黄俊杰)近日,杭州西站、杭州东站等地纷纷出现数字求职机的身影。其通过人脸识别技术,可帮助各地来杭青年实现轻松面试,“刷脸”找工作。求职者在杭...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
AI未来或超越“最聪明的人”?专家谈发展如何兼顾公平
中新社北京4月11日电 (记者 马帅莎)到明年底或2026年,人工智能(AI)或超越“最聪明的人”,美国知名企业家埃隆·马斯克近日对人工智能的这一大胆猜想引起关注,这比他去年...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
不合理差评的“紧箍”如何松一松?
投诉背后有委屈,服务分被扣难升级,差错责任分配待完善不合理差评的“紧箍”如何松一松?本报记者 周子元 于灵歌《工人日报》(2024年04月12日 05版)阅读提示扣分、罚款、降低排...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
网络渠道“眼见”不一定为实 防范“AI换脸”诈骗行为
防范“AI换脸”诈骗行为本报记者 屈信明《 人民日报 》( 2024年04月12日 第 19 版)近年来,多个行业创新人工智能技术应用场景,银行智能机器人、虚拟主持人等为社会公众提供了...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
▌简易百科推荐
MySQL 核心模块揭秘
server 层会创建一个 SAVEPOINT 对象,用于存放 savepoint 信息。binlog 会把 binlog offset 写入 server 层为它分配的一块 8 字节的内存里。 InnoDB 会维护自己的 savepoint...【详细内容】
2024-04-03  爱可生开源社区    Tags:MySQL   点击:(7)  评论:(0)  加入收藏
MySQL 核心模块揭秘,你看明白了吗?
为了提升分配 undo 段的效率,事务提交过程中,InnoDB 会缓存一些 undo 段。只要同时满足两个条件,insert undo 段或 update undo 段就能被缓存。1. 关于缓存 undo 段为了提升分...【详细内容】
2024-03-27  爱可生开源社区  微信公众号  Tags:MySQL   点击:(11)  评论:(0)  加入收藏
MySQL:BUG导致DDL语句无谓的索引重建
对于5.7.23之前的版本在评估类似DDL操作的时候需要谨慎,可能评估为瞬间操作,但是实际上线的时候跑了很久,这个就容易导致超过维护窗口,甚至更大的故障。一、问题模拟使用5.7.22...【详细内容】
2024-03-26  MySQL学习  微信公众号  Tags:MySQL   点击:(10)  评论:(0)  加入收藏
从 MySQL 到 ByteHouse,抖音精准推荐存储架构重构解读
ByteHouse是一款OLAP引擎,具备查询效率高的特点,在硬件需求上相对较低,且具有良好的水平扩展性,如果数据量进一步增长,可以通过增加服务器数量来提升处理能力。本文将从兴趣圈层...【详细内容】
2024-03-22  字节跳动技术团队    Tags:ByteHouse   点击:(25)  评论:(0)  加入收藏
MySQL自增主键一定是连续的吗?
测试环境:MySQL版本:8.0数据库表:T (主键id,唯一索引c,普通字段d)如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不...【详细内容】
2024-03-10    dbaplus社群  Tags:MySQL   点击:(9)  评论:(0)  加入收藏
准线上事故之MySQL优化器索引选错
1 背景最近组里来了许多新的小伙伴,大家在一起聊聊技术,有小兄弟提到了MySQL的优化器的内部策略,想起了之前在公司出现的一个线上问题,今天借着这个机会,在这里分享下过程和结论...【详细内容】
2024-03-07  转转技术  微信公众号  Tags:MySQL   点击:(28)  评论:(0)  加入收藏
MySQL数据恢复,你会吗?
今天分享一下binlog2sql,它是一款比较常用的数据恢复工具,可以通过它从MySQL binlog解析出你要的SQL,并根据不同选项,可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。主要...【详细内容】
2024-02-22  数据库干货铺  微信公众号  Tags:MySQL   点击:(49)  评论:(0)  加入收藏
如何在MySQL中实现数据的版本管理和回滚操作?
实现数据的版本管理和回滚操作在MySQL中可以通过以下几种方式实现,包括使用事务、备份恢复、日志和版本控制工具等。下面将详细介绍这些方法。1.使用事务:MySQL支持事务操作,可...【详细内容】
2024-02-20  编程技术汇    Tags:MySQL   点击:(53)  评论:(0)  加入收藏
MySQL数据库如何生成分组排序的序号
经常进行数据分析的小伙伴经常会需要生成序号或进行数据分组排序并生成序号。在MySQL8.0中可以使用窗口函数来实现,可以参考历史文章有了这些函数,统计分析事半功倍进行了解。...【详细内容】
2024-01-30  数据库干货铺  微信公众号  Tags:MySQL   点击:(54)  评论:(0)  加入收藏
mysql索引失效的场景
MySQL中索引失效是指数据库查询时无法有效利用索引,这可能导致查询性能显著下降。以下是一些常见的MySQL索引失效的场景:1.使用非前导列进行查询: 假设有一个复合索引 (A, B)。...【详细内容】
2024-01-15  小王爱编程  今日头条  Tags:mysql索引   点击:(85)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条