记录工作遇到的死锁问题(Lock wait timeout exceeded; try restarting transaction)
1.问题背景
刚来新公司不久,对业务还不太熟悉,所以领导先安排我维护原有系统。大概介绍下项目背景,项目分为核心业务部分在项目A中,与第三方交互的业务在项目B中,前端发起请求调用A项目接口,并在A项目中调用B项目接口,并在B项目中调用第三方获取数据(原有系统这样设计的)。
获取到第三方数据后判断数据库中是否有该记录(有唯一键),如有则执行更新操作,没有则新增。并且如果第三方认为该数据已失效,需要从数据库中删除(逻辑删除),并返回第三方删除成功回调,后续便不会再查到已失效的数据。
对应流程图如下

在代码处理中对整个过程加事务@Transactional注解,即在对数据进行删除(逻辑删除,实际执行update语句)时会根据唯一索引对该行加锁。在生成环境B项目频繁出现Lock wait timeout exceeded; try restarting transaction 异常,经排查定位到该功能代码,排查代码发现该功能有如下代码

有经验的同学应该已经看出问题所在,这里将全局异常捕获,记录错误日志,但问题就出在catch这里,由于异常被catch吞噬,@Transactional无法拿到异常,所以不会执行rollback回滚,导致一直占用数据库行锁。(这里的异常是调用第三方接口失败,由于调用太频繁,第三方接口崩溃,这里后续也做了并发控制) 所以后续事务在执行更新该行记录时由于得不到锁而等待失败,就报了Lock wait timeout exceeded; try restarting transaction 异常。
2.问题影响
由于该接口是在核心项目A中有客户端发起调用,并在A项目中调用B项目,由于B项目死锁无法返回结果,导致A项目前端大量请求阻塞,由于tomcat支持的请求线程数有限,该问题直接导致A服务宕机。影响较为严重。
3.如何解决
下面说下该问题解决思路,由于A项目宕机,在服务器日志中可以看到大量上述异常信息,Lock wait说明出现了锁问题。
a.使用 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;查看当前事务,使用SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;查看当前锁定的事务,使用SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;查看当前等锁的事务。使用以上三个sql基本能定位到代码所在位置。
b.定位到代码后,就要看具体的代码问题了,导致异常没有回滚的原因很多。这里说一个注意事项,使用@Transactional注解,默认只会对RuntimeException进行回滚,而对IOException和SQLException不会触发回滚。如果要对两个非运行时异常进行回滚,需要在@Transactional中加入@Transactional( rollbackForClassName = {"IOException","SQLException"})或对全局异常Exception做回滚,配置为@Transactional(rollbackFor = Exception.class)。又或者捕获IOException后手动抛出一个RuntimeException
总结
以上为博主在实际工作中遇到的问题,这里记录一下方便以后遇到类似问题可以快速定位并解决问题。也希望能对大家有帮助。
记录工作遇到的死锁问题(Lock wait timeout exceeded; try restarting transaction)的更多相关文章
- 【问题解决:死锁】Lock wait timeout exceeded; try restarting transaction的问题
执行数据删除操作时一直超时并弹出Lock wait timeout exceeded; try restarting transaction错误 解决办法 1.先查看数据库的事务隔离级别 select ...
- mysql死锁,等待资源,事务锁,Lock wait timeout exceeded; try restarting transaction解决
前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理: ...
- 项目中遇到的死锁问题: Lock wait timeout exceeded; try restarting transaction
最近项目中频繁出现 Lock wait timeout exceeded; try restarting transaction这个错误,把我们弄得痛苦不堪啊,为了解决问题,上网上找好多资料,终于把 ...
- mysql Lock wait timeout exceeded; try restarting transaction解决
前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理: ...
- MySQL事务锁等待超时 Lock wait timeout exceeded; try restarting transaction
工作中处理定时任务分发消息时出现的问题,在查找并解决问题的时候,将相关的问题博客收集整理,在此记录下,以便之后再遇到相同的问题,方便查阅. 问题场景 问题出现的场景: 在消息队列处理消息时,同一事务内 ...
- MySQL应用报错:java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
开发反馈,某业务系统插入一条记录的时候,日志报错,插入失败: ### Error updating database. Cause: java.sql.SQLException: Lock wait ...
- pymysql.err.InternalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')错误处理
问题描述: 在使用pymysql库时,利用游标执行插入操作,产生错误,会出现pymysql.err.InternalError: (1205, 'Lock wait timeout exceeded; ...
- 排查mysql innodb Lock wait timeout exceeded; try restarting transaction的问题
OMG写的时候崩溃了一次. 触发关注这个问题的事情是 我们在使用pt-online-schedule 改表的时候总是拿不到锁,并且报出mysql innodb Lock wait timeout ex ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
本文为博主原创: 以下为在程序运行过程中报的错误, org.springframework.dao.CannotAcquireLockException: ### Error updating dat ...
随机推荐
- 一篇文章彻底搞懂snowflake算法及百度美团的最佳实践
写在前面的话 一提到分布式ID自动生成方案,大家肯定都非常熟悉,并且立即能说出自家拿手的几种方案,确实,ID作为系统数据的重要标识,重要性不言而喻,而各种方案也是历经多代优化,请允许我用这个视角对分布 ...
- Java 异常处理的 20 个最佳实践,你知道几个?
异常处理是 Java 开发中的一个重要部分,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等.Java 提供了几个异常处理特性,以try,catch 和 finally 关键字的形式内建 ...
- 自定义表头Datagrid
自定义的一个表头 <bp:BasePage x:Class="NetReform.Pages.RealProbabiTableCompare" xmlns="htt ...
- Activity 的 36 大难点,你会几个?「建议收藏」
前言 学 Android 有一段时间了,一直都只顾着学新的东西,最近发现很多平常用的少的东西竟让都忘了,趁着这两天,打算把有关 Activity 的内容以问题的形式梳理出来,也供大家查缺补漏. 本文中 ...
- css伪类选择器的查找顺序
当伪类选择器last-child.first-child无效时,就是因为不了解css伪类选择器的查找顺序造成选中某一元素失败. 先给出一段dom <body> <div>第一个 ...
- Java基础(37)ArrayList的remove方法
1.问题描述 给定两个字符串 s 和 t,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. 输入: s = "abcd& ...
- 配置IIS服务器提供APP文件下载
[IIS7.IIS7.5] 1)打开IIS服务管理器,左边点到计算机(也可设置特定网站) 2)右边功能项中找到MIME类型,双击打开3)右键“添加”4)扩展名中填写".apk",M ...
- django-模板之URL标签(五)
book/views.py from django.shortcuts import render def index(request): return render(request,"in ...
- FastJson的使用心得
本文为早前整理,参考文献已找不到,如有侵权请与我联系,添加参考链接. 一丶基本使用 1.1主要API fastjson入口类是com.alibaba.fastjson.JSON,主要的API是JS ...
- CSPS模拟 46
勿忘国耻. 由于重新评测我看到了不是很真实的一幕 紧接着是更不真实的一幕 就在虚假形象快要建立完成的时候 它由于来自东方的神秘力量倒塌了 被两个学校的大佬爆踩了(捂脸 T1 无脑背包? 考试时想1h想 ...