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/

相關文章
相關標籤/搜索