Spring事務死鎖

2021-09-26 23:13:59 字數 1259 閱讀 9764

### 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結果:

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事務有兩種方式 程式設計式事務管理 宣告式事務管理 ...