背景:公司使用的自己封装的分库分表的中间件,配合Spirng的事物,实现数据库访问功能。
优化前的针对某接口的TPS只有30左右
接口调用Spring事物的伪代码
public void A(){
B();
}
public void B(){
//do somethings
//Mysql 具体事务逻辑 增删改查
// do something
}
事物配置针对方法A
<tx:method name="A" propagation="REQUIRED" />
public void A(){
B();
}
public void B(){
//do somethings
C();
//do somethings
}
public void C(){
//Mysql 具体事务逻辑 增删改查
}
事物配置细化到方法C,同时不修改A的事物逻辑,使用supports
<tx:method name="A" propagation="SUPPORTS"/>
<tx:method name="C" propagation="REQUIRES_NEW" />
优化完毕以后,TPS上升到300。提升了10倍。本质上是缩小了spring事物开启的粒度,从而减小了性能的消耗