1. 大事务

耗时比较久的事务

1.1. 产生原因

  • 操作数据多
  • 调用rpc超时
  • 有其他耗时操作
  • 锁竞争

1.2. 影响

  • 并发情况,连接池容易爆
  • 锁定数据多,大量阻塞和锁超时
  • 执行时间长,容易造成主从延迟
  • undo log 日志膨胀,增加了存储,降低查询性能
  • 如果有异常,事务回滚耗时

1.3. 优化方案

  1. @Transactional是声明式事务,操作不熟练,容易发生事务失效,问题不好排查。
  2. 声明式事务增加再方法尚,粒度较粗,嵌套业务比较多,不好控制事务范围

1.3.1. 编程式事务

TransactionTemplate

@Resource
private TransactionTemplate transactionTemplate;

        //减少事务颗粒度
        transactionTemplate.execute((status)->{
        insertBatch(costItemInfos);
        //插入记录表内容
        insertCostItemChanged();
        return Boolean.TRUE;
        });

减少事务颗粒度,可控

1.3.2. 将查询(select)放到事务外

Copyright & copy lviter@163.com            updated 2024-02-06 09:54:56

results matching ""

    No results matching ""