2013-04-10 164 views
1

我遇到了无法删除记录的问题。我一直遇到死锁超时问题。如何避免mysql死锁?

我运行一个简单的查询

delete from phone_calls where status =0 

一段时间后,我得到这个错误Lock wait timeout exceeded; try restarting transaction

我能做些什么来解决这个问题?我的查询有一些错误吗?

请注意,如果我添加了限制1000,但是没有限制,它会运行到死锁。

+0

您使用的是交易吗? – karthikr 2013-04-10 18:36:58

+1

您的交易意味着什么? – Mike 2013-04-10 18:37:53

+0

听起来像另一个并发查询或事务处理已锁定该表(或表中的某些行)。 – cdhowie 2013-04-10 18:38:17

回答

2

首先,这不是死锁。这是一个简单的锁定等待超时。死锁给出的错误就像“试图锁定时发现的死锁”。

其次,其他一些事务仍在运行,并且在status = 0时在phone_calls中的一个或多个行上持有锁。如果status不是索引,则有效地持有表锁并且两个查询可以'不要在同一时间做这个。删除所有这些行可能需要一段时间,而且您的作业运行频繁。

+0

感谢您提供此信息。是的,当我做了一个限制它执行它。谢谢 ) – Mike 2013-04-10 18:50:53