`

Spring事务死锁

 
阅读更多

今天同时导入两个比较耗时的批量操作,系统抛出了异常如下

 org.springframework.dao.DeadlockLoserDataAccessException: 

### Error updating database.  Cause: java.sql.SQLException: ORA-00060: 等待资源时检测到死锁

 

### The error may involve importPhoto.updateStudentPhoto-Inline

### The error occurred while setting parameters

### Cause: java.sql.SQLException: ORA-00060: 等待资源时检测到死锁

 

; SQL []; ORA-00060: 等待资源时检测到死锁

; nested exception is java.sql.SQLException: ORA-00060: 等待资源时检测到死锁

 

数据分析:

1.两个导入都修改了同一个表的数据

2.两个导入内容包含了相同的数据

3.两个导入的数据顺序不相同,是乱序的

两个导入都导入了1w条数据,导入1耗时3分钟左右,导入2耗时10分钟左右,意识到可能是事务死锁了。

原因分析:
    首先死锁是怎么发生的:
   简单说,两个或多个并发事务相互等待,互补想让,没有外力就无法继续下去,这就制造了死锁。数据库检测到死锁时,就会将死锁的各个事务回滚,并抛出ORA-00060异常。所以上面报错出现的情况极少,将死锁解除后又可以正常运行。

解决思路:
    死锁是无法根除的,特别在高并发的系统中。只有尽可能优化速度,减少互相等待的机会。原则为:执行速度越快越好,访问资源时锁的范围越小越好。根据这个原则就可以优化我们的sql,将负责的sql拆分,若果业务允许的情况下。还有事务越小越好。

解决技巧:
        1,出现死锁异常后,手工将死锁解开。
        2,找出造成死锁的sql:
            a,直接看日志:程序中日志做的很详细的话,是能够找到具体哪个sql报的错,操作的哪个表,还有别的模块也操作这个表,线程,并发的程序也会引起。
            b,通过oracle的后台v$session表 和 v$sql 的分析 找到。  
        3,对sql进行优化。   

 

分享到:
评论

相关推荐

    java面试笔试资料包括JAVA基础核心知识点深度学习Spring面试题等资料合集.zip

    线程死锁及解决办法.docx 线程锁之重入锁.docx 线程间的通信.docx 虚拟机内存结构和垃圾回收docx.docx 锁分类的了解.docx 集合的扩容机制.png SpringMVC部分.docx Spring部分.docx 第一题.pdf 第七题 谈谈MySQL支持...

    一次性搞定数据库事务

    彻底搞清楚Spring事务的7种传播级别的原理和使用:PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER、PROP

    leetcode下载-JavaTopic:Java面试题总结

    spring事务7种传播特性和隔离级别的理解? spring boot的启动过程 spring事务实现的原理 aop切面 如何解决spring循环依赖问题? Redis篇: redis持久化的原理(RDB、AOF); redis缓存穿透、缓存雪崩,有没有在实际...

    大厂面试专栏,冲击大厂必备

    JUC、死锁、CAS、线程池 第四篇:JVM 那点破事!内存结构、垃圾收集、OOM、双亲委派 第五篇:项目亮点!DDD、系统架构、分库分表、高性能、吞吐量 第六篇:面试那点破事!面试技巧、职业规划、谈薪资 第七篇:Redis ...

    史上最全java面试,103项重点知识,带目录

    98. spring 事务实现方式有哪些? 59 99. 说一下 spring 的事务隔离? 59 100. 说一下 spring mvc 运行流程? 60 101. spring mvc 有哪些组件? 61 102. @RequestMapping 的作用是什么? 62 103. @Autowired 的作用...

    Java常见面试题208道.docx

    98.spring 事务实现方式有哪些? 99.说一下 spring 的事务隔离? 100.说一下 spring mvc 运行流程? 101.spring mvc 有哪些组件? 102.@RequestMapping 的作用是什么? 103.@Autowired 的作用是什么? 十一、Spring ...

    积分管理系统java源码-new-and-old:实习过程中的温故知新

    Spring框架提供了编程式事务管理和声明式事务管理 编程式事务管理: 可以清楚地控制事务的边界 可自行实现事务开始时间、结束时间、撤消操作的时机等 可以实现细粒度的事务控制 声明式事务管理: 好处是...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【Spring】Spring事务机制 93 声明式事物 93 编程式事务 94 【Spring】Spring声明式事务的五个特性 94 传播性 94 隔离级别 95 只读 96 事务超时 97 回滚规则 97 【Spring】SpringMVC请求处理流程 97 【Mybatis】...

    网Y微专业Java高级架构师

    │ │ Spring JDBC(中).mp4 │ │ Tomcat安装与运行.mp4 │ │ 数据池链接.mp4 │ │ 数据访问-事务管理(中).mp4 │ │ 死锁分析与解决.mp4 │ │  │ ├─Java基础-复习课 │ │ 向上造型.mp4 ...

    java面试题库2021.pdf

    ②AOP 与事务、 权限控制 ③S2SH 整合开发 ④Spring, JPA 整合 2、 Hibernate ①ORM 与持久化映射 ②延迟加载、 性能优化 ③HQL 查询、 条件查询、 SQL 查询 ④二级缓存与查询缓存 3、 Struts ①MVC 模式与 Struts ...

    涵盖了90%以上的面试题

    JDBC处理事务采用什么方法 Statement和PreparedStatement的区别 getString()方法和getObject()方法有什么区别 jdbc和hibernate有什么区别 http1.0和http1.1和http2.0的区别 http和https的区别 http缓存 cookie和...

    开发人员为什么必须要了解数据库锁详解

    1.锁? 1.1何为锁 锁在现实中的意义为:封闭的器物,以钥匙或暗码开启。...小明是一个刚刚毕业在互联网公司工作的Java开发工程师,平常的工作就是完成PM的需求,当然在完成需求的同时肯定逃脱不了spring,spri

    java开源包1

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包11

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包2

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包3

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包6

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包5

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包10

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包4

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

Global site tag (gtag.js) - Google Analytics