2011-10-13 71 views
0

,而試圖以合理的限制進行一些一堆刪除我已經得到了一個錯誤:「鎖等待超時超標」而不PROCESSLIST沒有過程

query=(DELETE FROM `A` WHERE `id` < 123456 LIMIT 1000) 

exception=(1205, 'Lock wait timeout exceeded; try restarting transaction') 

而且

mysql> SHOW OPEN TABLES like 'A'; 
+----------+----------------------+--------+-------------+ 
| Database | Table    | In_use | Name_locked | 
+----------+----------------------+--------+-------------+ 
| D  | A     |  3 |   0 | 
+----------+----------------------+--------+-------------+ 
1 row in set (0.22 sec) 

我看到哪裏可能是死鎖,但show full processlist只輸出自己。在哪裏挖掘?

的InnoDB中,MySQL 5.5

回答

2

這意味着是應提交的事務。檢查可能使用此表操作的其他會話或其他應用程序。

+0

我假設任何其他活動會話都應該在'show full processlist'輸出中。我對嗎? –

+0

SHOW PROCESSLIST顯示打開的會話,並且應該有具有事務的會話,但Info字段(查詢)可以爲空。使用SHOW OPEN TABLES命令檢查鎖定表。 – Devart

+0

,但'SHOW PROCESSLIST'中沒有顯示會話,並且'SHOW OPEN TABLES'在我的表上顯示非零數量的鎖。 –

0

此外,在SELECT之後可能會有未關閉的交易。我解決了(我希望)這種情況下單獨(不是一些transaciotn部分)選擇後添加提交/回滾。

這個想法對我來說看起來很奇怪,所以在我嘗試過之前,我花了一些時間進行其他嘗試。它有所幫助。