尽量避免使用大事务操作,这样会导致严重的性能问题,可根据实际业务切分为小的业务点进行处理;技术方面,可分析代码,在原业务不发生变化的前提下切分为更小的事务块进行优化。
案例:
这几天新接手了一份需要性能调优的项目,公司的BM系统需要跟客户的ERP系统做对接,采用DBLINK方式从ERP中取数据,然后存到预算系统中(内部业务比较复杂),然后再将执行结果反馈给ERP。
这项任务是通过定时任务执行的,每天21:00开始运行,上线后发现明天上班时定时任务还没有运行结束。经过测试发现不足500条的数据,竟然耗时20分钟,这存在严重的性能问题,需要调优。业务比较简单,就是从ERP中取数据,然后经过一系列处理后存到公司的BM系统中,经分析的出的结果是从业务上很难进行优化。我们决定从代码入手。
原代码是这样做的:
public class Task {
public void run() {
service.method1();
}
}
public class Service {
public void method1() {
//开启事务
//1.获取到ERP中500条数据
//2.然后对这500调数据进行迭代,对每一条数据进行业务处理,然后记录处理的结果。
//3.将结果反馈给ERP
//关闭事务
}
}
优化后代码是这样做的(拆分成小事务后):