Se você acabou de matar uma grande consulta, isso levará tempo rollback
. Se você emitir outra consulta antes que a consulta finalizada seja revertida, poderá receber um erro de tempo limite de bloqueio. Foi o que aconteceu comigo. A solução foi apenas esperar um pouco.
Detalhes:
Eu havia emitido uma consulta DELETE para remover cerca de 900.000 de cerca de 1 milhão de linhas.
Fiz isso por engano (remove apenas 10% das linhas):
DELETE FROM table WHERE MOD(id,10) = 0
Em vez disso (remove 90% das linhas):
DELETE FROM table WHERE MOD(id,10) != 0
Eu queria remover 90% das linhas, não 10%. Então, eu matei o processo na linha de comando do MySQL, sabendo que ele reverteria todas as linhas que havia excluído até agora.
Em seguida, executei o comando correto imediatamente e recebi um lock timeout exceeded
erro logo depois. Percebi que o bloqueio pode realmente ser o rollback
da consulta morta ainda acontecendo no fundo. Então, esperei alguns segundos e refiz a consulta.