Too many active concurrent transactions

      上个周六,有场竞赛,由于是系统推荐的,参与的人数较多,大概有1100人参与了正赛(正赛的意思是指在竞赛限定的时间范围参与并交卷;还有个补赛,在限定时间范围以外的)。结果出现了有用户无法提交正常的问题。查了下后台日志,发现在执行sql语句的时候,返回了数据库异常。


这是包含2条插入语句的语句。Too many active concurrent transactions,字面意思,太多活动的并发事务。有想到,这是不是Nhibernate在执行UniqueResult时,开启一个事务。但是查了下,并没有,如果需要还要用session显示开启。所以占用的还是mysql的事务数。

查了下表,answerlog是MyISAM引擎,而answerresult是Innodb引擎。想到MyISAM表,是不支持事务的,那么是不是anserresult占了太多事务?于是将anserresult的引擎统一改成了myisam。结果发现平时非高峰时段的请求响应时间耗时平均增加了200ms。


这样推测在高峰期会下降的更加厉害,所以不能这么改。把表引擎重新改了回去。既然是提示事务过多,那么查下mysql支持的事务数。

发现


在mysql 5.5.4之前,在一个回滚段上就支持最多1023个数据修改事务。可惜,生产跑的mysql是5.1的,要升级不大可能。

看来只能从业务上,做些调整。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值