Lock wait timeout exceeded; try restarting......

mysql异常java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction:java

场景:mysql

1.开启事务,更新本地数据库;sql

2.调用银行接口;数据库

3.等待银行接口返回结果,银行返回成功,则提交事务;银行返回失败,则回滚更新本地数据库事务spa

异常缘由分析:调用银行接口等待时间过长,超过innodb_lock_wait_timeout阀值时,mysql的配置参数innodb_lock_wait_timeout阀值指的是事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败;当等待超过阀值时的状况,当锁等待超过设置时间的时候,就会报以下的错误;.net

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

解决办法:设计

使用以下命令查看等待时间:rest

show  global  variables like  '%wait%';blog

查看innodb_lock_wait_timeout的值,若是太小,能够修改,增大其值,命令以下(设置等待时间50秒):接口

set innodb_lock_wait_timeout=50;

set global innodb_lock_wait_timeout=50;

总结:整个流程设计存在缺陷,很容易产生掉单,我的建议拆分业务,先调用银行接口,银行反馈信息直接告知用户,若是支付失败,提示用户从新支付;若是支付成功后,出现更新数据库操做按钮供用户操做。

参考:http://blog.itpub.net/12679300/viewspace-1418320/

相关文章
相关标签/搜索