2013-04-10 125 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