Lock wait timeout exceeded; try restarting......
Lock wait timeout exceeded; try restarting......
凯文加内特 发表于2年前
Lock wait timeout exceeded; try restarting......
  • 发表于 2年前
  • 阅读 86
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction

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

场景:

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

2.调用银行接口;

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

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

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

解决办法:

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

show  global  variables like  '%wait%';

查看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/

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 319
博文 663
码字总数 86580
×
凯文加内特
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: