Если вы только что убили большой запрос, потребуется время до rollback
. Если вы выполните другой запрос до того, как завершенный откат будет завершен, вы можете получить ошибку тайм-аута блокировки. Вот что случилось со мной. Решением было просто немного подождать.
подробности:
Я выполнил запрос DELETE, чтобы удалить около 900 000 из примерно 1 миллиона строк.
Я запустил это по ошибке (удаляет только 10% строк):
DELETE FROM table WHERE MOD(id,10) = 0
Вместо этого (удаляет 90% строк):
DELETE FROM table WHERE MOD(id,10) != 0
Я хотел удалить 90% строк, а не 10%. Поэтому я убил процесс в командной строке MySQL, зная, что он откатит все строки, которые он удалил.
Затем я немедленно выполнил правильную команду и вскоре получил ошибку lock timeout exceeded
. Я понял, что блокировка может быть на самом деле rollback
уничтоженного запроса, все еще происходящего в фоновом режиме. Поэтому я подождал несколько секунд и повторно запустил запрос.