今天同时导入两个比较耗时的批量操作,系统抛出了异常如下
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进行优化。
相关推荐
- **并发控制**:在多线程环境下,需要注意事务之间的隔离级别设置,以避免死锁或其他并发问题。 - **性能考量**:过度使用事务可能会对性能产生负面影响,因此需要合理设计事务范围。 #### 七、总结 事务管理是...
Spring事务管理是Spring框架的核心特性之一,它提供了一种强大且灵活的方式来管理应用程序中的事务边界。在企业级Java应用中,事务处理是确保数据一致性、完整性和可靠性的关键部分。本篇文章将深入探讨Spring的事务...
1. **自动检测和解除死锁**:InnoDB会定期检查是否存在死锁,并自动解除死锁,牺牲其中一个事务来恢复系统的正常运行。 2. **锁等待超时**:设置合理的锁等待超时时间,避免长时间等待而导致死锁。 3. **优化事务...
Spring框架在企业级Java应用中广泛用于实现事务管理,而JTA(Java Transaction API)是Java平台上的标准事务处理API,适用于分布式环境。本篇文章将深入探讨如何在Spring中配置JTA事务管理,以实现跨数据库和资源的...
事务属性是Spring事务管理的关键,主要包括四个部分: 1. 传播行为:由`getPropagationBehavior()`方法返回,决定了当前事务如何与其他事务相互作用。例如,PROPAGATION_REQUIRED表示如果存在当前事务,则加入到...
标题中的“Spring JDBC 事务”指的是在Spring框架中使用JDBC进行数据库操作时的事务管理。...在实践中,要根据项目的具体需求选择合适的事务管理策略,并注意处理事务可能导致的并发问题,如死锁。
2. **Resource Manager**:资源管理者确保团队中有足够的专家资源来处理事务管理,包括数据库管理员和高级开发人员,他们在实现Spring事务策略时起关键作用。 3. **Senior Technical Manager**:高级技术经理需要...
例如,可能会提到如何解决事务回滚问题,如何避免死锁,以及如何优化事务性能。此外,可能会讲解如何通过日志分析事务状态,以及在出现问题时如何进行故障排查。 标签“源码”表明文章可能包含了对这些组件内部工作...
而"Spring事务"则是Spring框架中的一个重要概念,它涉及到数据一致性、错误恢复以及业务操作的原子性。在此,我们将深入探讨Spring事务管理的相关知识点。 首先,事务是数据库操作的基本单位,它确保了一组数据库...
但在高并发下,事务的隔离级别和死锁问题也需要关注和妥善处理。 四、最佳实践 1. 适当的线程池大小:根据服务器硬件配置和业务特性,合理设定线程池的大小,避免过度消耗资源或处理请求不及时。 2. 请求队列设计:...
综上所述,Java中的事务处理是通过JDBC、Spring框架等工具来实现的,涉及到事务的四大特性、隔离级别、传播行为以及如何处理并发和分布式场景下的事务问题。了解并掌握这些知识点,对于开发高可用、数据一致性的应用...
而在Spring中,使用`DataSourceTransactionManager`管理事务时,如果遇到死锁,Spring也会尝试回滚受影响的事务,以解除死锁状态。 总的来说,理解并掌握MySQL的事务机制和Spring的事务管理是开发高并发、高可用...
3. Spring事务管理实例:通过@Transactional注解,可以在方法级别声明事务,实现事务的自动开始、提交或回滚。 五、EJB事务 Enterprise JavaBeans(EJB)也提供了事务管理服务。EJB容器会根据Bean的方法调用自动...
4. **事务管理**:由于MySQL集群支持分布式事务,Spring的声明式事务管理能够无缝地工作。只需在需要事务的Service层方法上添加@Transactional注解,Spring会自动管理事务的开始、提交或回滚。 5. **高可用性和负载...
在分布式系统中,事务的一致性是非常关键的,Spring Boot 2.x 版本通过与不同的分布式事务管理器集成,如LCN(Local Transaction Coordinator),可以实现高效的分布式事务处理。 Spring Boot 2.x 集成LCN分布式...
本案例主要探讨的是在基于SpringCloud的环境下,如何利用LCN(Local Connection Neutralization)分布式事务框架来实现高效率、高可用的分布式事务管理。LCN框架简化了分布式事务的处理流程,使得开发者可以更专注于...
- **Spring框架事务管理**:通过Spring框架提供的强大且灵活的事务管理支持,适用于各种Java应用。 #### 四、Java事务设计模式 - **编程式事务管理**:开发者需要在代码中显式地管理事务,通常用于复杂的业务逻辑。...
同时,需要注意在分布式环境中可能出现的死锁、活锁问题,以及如何处理长时间运行的事务,以避免性能瓶颈。 总的来说,Atomikos分布式事务提交框架是Java开发者在构建高可用、高并发系统时的重要工具,它简化了...
Spring Boot 微服务集成 Fescar 解决分布式事务问题 在分布式系统中,事务问题一直是一个难以解决的问题。在传统的 2PC 提交协议中,会持有一个全局性的锁,所有局部事务预提交成功后一起提交,或有一个局部事务预...
6. **Spring事务管理**:Spring提供了声明式和编程式的事务管理,确保在多线程环境中数据的一致性。 7. **Spring Bean**:Spring容器管理的对象称为Bean,容器通过XML、注解或Java配置来定义Bean的生命周期和装配...