### error updating database. cause: com.mysql.jdbc.exceptions.jdbc4.mysqltransactionrollbackexception: lock wait timeout exceeded; try restarting transaction
### the error occurred while setting parameters
該異常的意思是:鎖等待超時。就是說當前事務在等待其他事務釋放鎖資源,超過預設50s時,丟擲的異常。
出現這種問題,一般只影響新增、刪除、修改功能 ,查詢正常
重現方式:
啟動事務a修改a資料,斷點不提交事務
啟動事務b修改a資料,就會一直等待提交事務,直接丟擲 鎖等待超時異常。
排查方式:
執行sql:
select * from information_schema.innodb_trx;
select * from information_schema.innodb_locks;
select * from information_schema.innodb_lock_waits;
sql1結果:![](https://pic.w3help.cc/c5b/2901369dc5bd71ea96dad14174708.jpeg)
trx_id=24759事物就是b事務,它一直在等之前的事務提交
trx_id=24757事務就是a事務,它還在執行中,事務還未提交
sql2結果:
可以看出鎖住的表,和某條資料
sql3結果:
可以看到trx_id=24759事務在待trx_id=24757事務
臨時解決方案:
找到mysql_thread_id,殺掉執行緒。
最終的問題在**層,比如批量更新,事務巢狀待,都有可能引發事務鎖死。。
mysql事務死鎖 MySQL事務 死鎖
一 概念 多個事務在同一資源上互相占用形成迴路。這就是死鎖 基本命令 檢視是否自動提交事務 show variables like autocommit 設定事務是否自動提交 set autocommit 0 set autocommit 1 二 例子 create table user id bi...
Spring 事務 事務控制
0 註解 autowire 自動注入 url url b 1 spring專案中事務手動回滾 b transactionaspectsupport.currenttransactionstatus setrollbackonly 或者丟擲異常 transactional rollbackfor pu...
Spring事務(一) Spring事務的使用
事務的經典舉例 某人要在商店使用電子貨幣購買100元的東西,當中至少包括兩個操作 該人賬戶減少100元 商店賬戶增加100元 事務就是要確保以上兩個操作 都能完成 或者 一起取消,否則就會出現100元平白消失或出現的情況。摘自wiki spring事務有兩種方式 程式設計式事務管理 宣告式事務管理 ...