1. 程式人生 > >ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction的問題解決(

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction的問題解決(

https://blog.csdn.net/mayor125/article/details/76186661

今天讓運維將測試庫的資料到了匯出一份到自己電腦本地來做測試,資料量較大(幾百萬條吧),系統執行起來之後檢視訂單列表資料很慢(估計是自己電腦配置太low了,重新整理列表的時候一直在載入),然後就想刪除部分資料,在刪除的時候出現報錯:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction。(把這個問題記錄下來,防止以後再次遇到了方便處理)。

 

DELETE FROM t_loan_apply WHERE DATE(addtime) < '2017-06-01';

 

網上一通查詢,解決方式如下:

1、先檢視資料庫的事務隔離級別:

select @@tx_isoloation;

REPEATABLE-READ // MySQL預設的事務隔離級別就是REPEATABLE-READ

 

2、然後檢視當前資料庫的執行緒情況:

SHOW FULL PROCESSLIST;

 

沒有看到正在執行的很慢SQL記錄執行緒,再去檢視innodb的事務表INNODB_TRX,看下里面是否有正在鎖定的事務執行緒,看看ID是否在show full processlist裡面的sleep執行緒中,如果是,就證明這個sleep的執行緒事務一直沒有commit或者rollback而是卡住了,我們需要手動kill掉。

 

SELECT * FROM information_schema.INNODB_TRX;

 

3、發現有id為616694的sql,需要手動kill掉

KILL 616694;

 

kill之後,再去執行上面的delete語句,就可以執行成功了。

 

注意:MySQL是自動提交事務的(即:autocommit=1),可以使用 show variables like 'autocommit' 或者 select @@autocommit 檢視當前資料庫是否為自動提交事務;若autocommit的值不是1還可以使用set global autocommit = 1 將自動提交設定為開啟。