Исправление «Превышено время ожидания блокировки; попробуйте перезапустить транзакцию» для «зависшей» таблицы Mysql? - PullRequest
112 голосов
/ 04 мая 2010

Из сценария я тысячи раз отправлял запрос в мою локальную базу данных:

update some_table set some_column = some_value

Я забыл добавить часть where, поэтому для одного и того же столбца было установлено одинаковое значение для всех строк в таблице, и это было сделано тысячи раз, и столбец был проиндексирован, поэтому соответствующий индекс, вероятно, тоже был обновлен много раз.

Я заметил, что что-то не так, потому что это заняло слишком много времени, поэтому я убил сценарий. С тех пор я даже перезагрузил свой компьютер, но что-то застряло в таблице, потому что выполнение простых запросов занимает очень много времени, и когда я пытаюсь сбросить соответствующий индекс, происходит сбой с этим сообщением:

Lock wait timeout exceeded; try restarting transaction

Это таблица innodb, поэтому застрявшая транзакция, вероятно, неявная. Как я могу исправить эту таблицу и удалить застрявшую транзакцию из нее?

Ответы [ 12 ]

0 голосов
/ 10 мая 2011

Я столкнулся с той же проблемой с заявлением об обновлении. Мое решение состояло в том, чтобы просто выполнить операции, доступные в phpMyAdmin для таблицы. Я оптимизировал, очистил и дефрагментировал таблицу (не в этом порядке). Нет необходимости сбрасывать таблицу и восстанавливать ее из резервной копии для меня. :)

0 голосов
/ 25 января 2011

Я решил проблему, удалив таблицу и восстановив ее из резервной копии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...