2011-10-13 53 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部分)选择后添加提交/回滚。

这个想法对我来说看起来很奇怪,所以在我尝试过之前,我花了一些时间进行其他尝试。它有所帮助。