前言

服务报错:

Lock wait timeout exceeded; try restarting transaction

排查

字面意思 锁等待超时了,尝试重启事务。
既然是数据库死锁,着手排查数据库死锁信息
查看最近死锁的日志

show engine innodb status

在打印出来的信息中找到“LATEST DETECTED DEADLOCK”一节内容
分析其中的内容,我们就可以知道最近导致死锁的事务有哪些

通过sql匹配到具体的代码块发现,该方法使用了事务
@Transactional(rollbackFor = Exception.class),但该方法时单表更新,无需事务
因更新前有大量的查询操作导致事务时间超长

解决

去除只读事务和单表事务,问题解决

复盘

通过日志信息得出数据库死锁,再排查到相关业务代码,因事务中含有大量耗时查询导致事务超时,无法更新导致死锁
尽量减少@Transactiona注解使用,如需使用尽量事务粒度细化可使用

@Autowired
private TransactionTemplate transactionTemplate;

总结

少用@Transactional及只读事务
事务中避免一次性处理太多数据
如需使用事务尽量细化
异步处理非事务代码

扩展

死锁信息查看

1、查看正在进行中的事务 SELECT * FROM information_schema.INNODB_TRX
2、查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
3、查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
4、查询是否锁表 SHOW OPEN TABLES where In_use > 0;
5、查看最近死锁的日志 SHOW ENGINE INNODB STATUS

解除死锁

解除死锁
查看当前正在进行中的进程
show processlist
也可以使用 SELECT * FROM information_schema.INNODB_TRX;
这两个命令找出来的进程id 是同一个。 杀掉进程对应的进程
kill id

@Transactional(readOnly = true)

@Transactional(readOnly = true)注解,申明为只读事务。
多条查询下要使用该注解,能够防止多次查询到的数据不一致(维持可重复读)。

在将事务设置成只读后,当前只读事务就不能进行写的操作,否则报错。如下

Cause: java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed;

事务粒度细化
新加Service方法

@Servciepublicclass ServiceA {@Autowiredprvate ServiceB serviceB;public void save(User user) {queryData1();queryData2();serviceB.doSave(user);}}@Servciepublicclass ServiceB {@Transactional(rollbackFor=Exception.class)public void doSave(User user) {addData1();updateData2();}}

在该Service类中注入自己

@Servcie
publicclass ServiceA {@Autowiredprvate ServiceA serviceA;public void save(User user) {queryData1();queryData2();serviceA.doSave(user);}@Transactional(rollbackFor=Exception.class)public void doSave(User user) {addData1();updateData2();}}

重要的东西全部都在半径三米以内

Lock wait timeout exceeded; try restarting transaction解决相关推荐

  1. mysql死锁释放时间参数_【Mysql】mysql 事务未提交导致死锁 Lock wait timeout exceeded; try restarting transaction 解决办法...

    问题场景 问题出现环境: 1.在同一事务内先后对同一条数据进行插入和更新操作: 2.多台服务器操作同一数据库: 3.瞬时出现高并发现象: 不断的有一下异常抛出,异常信息: org.springfram ...

  2. 数据库 1205 Error 'Lock wait timeout exceeded; try restarting transaction' on query

    收到报警,mysql的从数据库在同步的过程出现问题,已停止同步. mysql> show slave status\G *************************** 1. row ** ...

  3. 关于MySQL出现`lock wait timeout exceeded; try restarting transaction` 的解决方案

    关于MySQL出现lock wait timeout exceeded; try restarting transaction 的解决方案. 一.问题抛出 在做查询语句时,MySQL 抛出了这样的异常 ...

  4. 关于MySQL出现锁等待lock wait timeout exceeded; try restarting transaction 的解决方案

    关于MySQL出现lock wait timeout exceeded; try restarting transaction 的解决方案. 一.问题抛出 在做查询语句时,MySQL 抛出了这样的异常 ...

  5. 【问题解决:死锁】Lock wait timeout exceeded; try restarting transaction的问题

    执行数据删除操作时一直超时并弹出Lock wait timeout exceeded; try restarting transaction错误 解决办法 1.先查看数据库的事务隔离级别 select ...

  6. Lock wait timeout exceeded; try restarting transaction

    排查过程: 查看数据库 INNODB_LOCKS,未发现有死锁的记录. 查看 SHOW PROCESSLIST; 也未见异常进程: 通过Mysql的控制台,查询慢日志,也未找到有关此表的Mysql慢日 ...

  7. 排查mysql innodb Lock wait timeout exceeded; try restarting transaction的问题

    转载自:https://www.cnblogs.com/piperck/p/6212524.html OMG写的时候崩溃了一次. 触发关注这个问题的事情是 我们在使用pt-online-schedul ...

  8. mysql 中lock wait_应用中MYSQL 报错Lock wait timeout exceeded; try restarting transaction

    最近开发的应用开始做性能测试.在小于80用户并发的时候一切OK,并发量到100用户时,持续压5分钟.应用开始报错,并且只有1次错误,持续时间长,比如10分钟,会报3次. 日志如下: Caused by ...

  9. 'Lock wait timeout exceeded; try restarting transaction'问题

    OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction') 原因很简单,太多错误,意外处理没有 ...

  10. MySQL -- Lock wait timeout exceeded; try restarting transaction参数控制

    Lock wait timeout exceeded; try restarting transaction 锁等待超时..回滚事务.. 当事务1  获得锁 start TRANSACTION upd ...

最新文章

  1. 2019年春季学期第七周作业
  2. kali - Nmap
  3. 【转】Xcode 7 真机调试详细步骤
  4. selenium+chromeheadless爬取网站
  5. java关于贪吃蛇的源代码_完整的贪吃蛇(蛇吃蛋)Java源代码
  6. 编辑器图片上传 linux,summernote 富文本编辑器上传本地图片
  7. html中右边框出不来,html,为什么右边框会被挡住?
  8. 保研论坛app服务器网站,保研论坛官网版app
  9. director 3d tank
  10. 深度linux升级,测试从Deepin Linux 15升级到Deepin Linux v20
  11. A7芯片 IOS降级 跳过ID | ipad Mini2降级 10.3.3
  12. 基于遗传算法的柔性车间调度优化(Matlab代码实现)
  13. 深度学习与计算机视觉教程(7) | 神经网络训练技巧 (下)(CV通关指南·完结)
  14. 【盘点】电影中八大邪恶的超级计算机
  15. 数显之家快讯:【SHIO世硕心语】SHIO世硕科技企业文化宣言知多少?
  16. Java语言基础Day07(API概述、Scanner、匿名对象、Random、对象数组、ArrayList)
  17. 10 大话设计模式C++实现之模板方法模式
  18. win10家庭版调出组策略(gpedit.msc)要求的函数不受支持
  19. 计算机硬件系统一直延用,会计从业考试:会计电算化计算机硬件系统
  20. HNU-电子测试平台与工具-数字密码锁实验报告

热门文章

  1. 主要讲解了构造器和伴生对象内容
  2. C语言程序初体验第五题
  3. 手动删除EMCC13C的 Repository Database
  4. ubuntu安装utorrent,下载六维资源
  5. 微信分享 微信对图片文字大小的限制 代码如下
  6. 中国石油大学远程教育《大学英语(四)》第一阶段在线作业
  7. ubuntu 下正确安装android手机驱动
  8. 学生开发者对于微软技术的反馈
  9. 调试时出现:undefined Expecting 'EOF','}',',',']', got STRING以下错误的解决方法
  10. 多小波分解2-D图像