排查數據庫死鎖問題


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM