1. 大事务
耗时比较久的事务
1.1. 产生原因
- 操作数据多
- 调用rpc超时
- 有其他耗时操作
- 锁竞争
1.2. 影响
- 并发情况,连接池容易爆
- 锁定数据多,大量阻塞和锁超时
- 执行时间长,容易造成主从延迟
- undo log 日志膨胀,增加了存储,降低查询性能
- 如果有异常,事务回滚耗时
1.3. 优化方案
- @Transactional是声明式事务,操作不熟练,容易发生事务失效,问题不好排查。
- 声明式事务增加再方法尚,粒度较粗,嵌套业务比较多,不好控制事务范围
1.3.1. 编程式事务
TransactionTemplate
@Resource
private TransactionTemplate transactionTemplate;
//减少事务颗粒度
transactionTemplate.execute((status)->{
insertBatch(costItemInfos);
//插入记录表内容
insertCostItemChanged();
return Boolean.TRUE;
});
减少事务颗粒度,可控