Spring事務死鎖

 

### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
### The error may involve com.example.demo.mapper.AdminMapper.updateById-Inline
### 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,殺掉線程。

最終的問題在代碼層,比如批量更新,事務嵌套待,都有可能引發事務鎖死。。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章