在運作資料庫某一語句的時候(資料量大概有一億條),運作的特别慢,可能是我自己電腦組態不高,是以想删選一些資料但是運作的時候報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 将自動送出設定為開啟。