2013-04-10 2 views
1

У меня возникла проблема, когда я не могу удалить записи. Я продолжаю сталкиваться с проблемой тайм-аута блокировки.Как избежать тупика mysql?

Я бег простого запроса

delete from phone_calls where status =0 

через некоторое время я получаю эту ошибку Lock wait timeout exceeded; try restarting transaction

Что я могу сделать, чтобы решить эту проблему? есть ли какие-то ошибки в моем запросе?

примечание, если я добавляю предел 1000, он работает, но без ограничений он врезается в мертвый замок.

+0

Вы используете транзакцию? – karthikr

+1

Что вы подразумеваете под транзакциями? – Mike

+0

Похоже, что другой параллельный запрос или транзакция заблокировали таблицу (или некоторые строки в таблице). – cdhowie

ответ

2

Прежде всего, это не мертвый замок. Это простой тайм-аут ожидания блокировки. Ошибка, указанная в мертвой блокировке, является чем-то вроде «Тупик, обнаруженный при попытке получить блокировку».

Во-вторых, некоторые другие транзакции все еще работают и удерживают блокировку на одной или нескольких строках в phone_calls со статусом = 0. Если статус не является индексом, вы эффективно держите блокировку таблицы и два запроса могут " t сделать это в одно и то же время. Вероятно, потребуется некоторое время, чтобы удалить все такие строки, и ваша работа выполняется слишком часто.

+0

Благодарим вас за эту информацию. Да, и когда я сделал предел, он выполнил это. Спасибо) – Mike