天天看點

MYSQL錯誤: ERROR 1205: Lock wait timeout exceeded(處理MYSQL鎖等待)解決辦法原因解決辦法

在運作資料庫某一語句的時候(資料量大概有一億條),運作的特别慢,可能是我自己電腦組態不高,是以想删選一些資料但是運作的時候報1205錯誤。

原因

有會話執行過DML操作,然後沒commit送出,再執行删除操作,就鎖了。

解決辦法

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

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

2、然後檢視目前資料庫的線程情況:

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

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

kill XXX;
           

4.再執行錯誤出現之前的删除語句

注意:MySQL是自動送出事務的(即:autocommit=1),可以使用

show variables like 'autocommit'

或者

select @@autocommit

檢視目前資料庫是否為自動送出事務;若autocommit的值不是1還可以使用set global autocommit = 1 将自動送出設定為開啟。