Если вы только что убили большой запрос, это займет время 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
из-за убитого запроса, все еще происходящего в фоновом режиме. Поэтому я подождал несколько секунд и снова запустил запрос.