Db.update(sql)并发情况下,容易出现事务长时间不提交

环境:springmvc+jfinal+durid+msql

在spring的controller中使用Db.update(sql)长时间并发情况下,Db.update容易卡住,从mysql事务监控来看,语句已经执行完毕,处于事物提交前的最后阶段,就是无法结束,不太确定到底是跟jfinal有关还是mysql或者是durid。

后来我尝试在Db.update外层套一层事务,由spring来开启事务和关闭事务也是同样的情况。

评论区

JFinal

2018-05-12 14:59

是不是只有在并发情况下才出现? 并发就会有锁的争用发生,用命令行登录 mysql,
使用 show processlist; 命令查看有没有死锁这类情况发生

通过按向上方向键再按回车键,可以快速不停地执行该命令,看输出表格中的各个状态

凌鹏

2018-05-13 20:05

死锁倒没有,也不是经常出现,可能偶尔过1~2天会遇到,一批这样的情况,长时间挂在mysql上,最终貌似也正常结束了。通过information.innodb_trx看都是running状态,quey字段都是空的,实际上是已经执行过update b set col=sysdate() where col1=xxx,由于这些空的running事务导致后面对同一条co1l=xxx的update操作都是lock_wait状态,可能是跟jfinal无关,但不知道从何下周解决,希望在这里能得到一些解决思路

热门反馈

扫码入社