### 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,殺掉線程。
最終的問題在代碼層,比如批量更新,事務嵌套待,都有可能引發事務鎖死。。