Lock wait timeout exceeded; try restarting transaction解決方法


最近在使用Mysql查詢語句時,出現了Lock wait timeout exceeded; try restarting transaction錯誤,在進行查閱后再次做下記錄

Lock wait timeout exceeded; try restarting transaction錯誤的意思是這條語句被鎖住了,需要重新執行事務

解決方法:

通過information_schema表來進行查找被鎖的語句。information_schema這張數據表保存了MySQL服務器所有數據庫的信息。如數據庫名,數據庫的表,表欄的數據類型與訪問權限等。再簡單點,這台MySQL服務器上,到底有哪些數據庫、各個數據庫有哪些表,每張表的字段類型是什么,各個數據庫要什么權限才能訪問,等等信息都保存在information_schema表里面。

以下三張表可以用來查看原因:

  • innodb_trx 當前運行的所有事務
  • innodb_locks 當前出現的鎖
  • innodb_lock_waits 鎖等待的對應關系

innodb_trx表的字段說明:

desc information_schema.innodb_trx;

 

 

 

 

 

 

 

 

 

通過以下語句來查看正在執行的事務:

select * from information_schema.innodb_trx

結果如下:

記錄trx_mysql_thread_id號,發現trx_state的狀態為RUNNING,說明事務正在進行,沒有鎖,但是可能由於sql復雜影響查詢效率,sql一直處於運行狀態

通過kill 28166 命令來殺掉mysql線程

殺掉線程后可以繼續查詢是否成功:

SELECT * from information_schema.processlist WHERE id = 28166;

 

發現成功殺死了線程

 殺死成功后,就應該考慮率下SQL優化或者SQL的復雜程度了,盡量來減少執行時間!!!

 

 

 

 


免責聲明!

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



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