一、常見報錯:
org.springframework.dao.CannotAcquireLockException異常,但是在打印出日志的時候,顯示的是
com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction。提示的是Lock wait timeout exceeded(鎖等待超時);try restarting transaction (嘗試開啟新事務);
二、排查
- 排查數據庫是否發生表鎖,整張表被鎖定,也就無法往里插入數據;
show open table where in_use > 0; //查詢是否表鎖
2. 排查數據庫中該表是否有事務搶占了該鎖,導致該請求無法獲取鎖,然后一直等待,等待時間超過數據庫設置的默認時間就會失敗。
select * from imformation_schema.innodb_trx; //查詢運行的事務,是否被鎖住
三、問題解決
- 只需要把之前的事務殺死就可以了
kill id; //id為線程id,使用該命令就可以殺死某條線程
2. 再次檢查select * from imformation_schema.innodb_trx,看結果是否為空