Si acaba de matar una consulta grande, llevará tiempo hacerlo rollback
. Si emite otra consulta antes de que la consulta finalizada se revierta, es posible que obtenga un error de tiempo de espera de bloqueo. Eso es lo que me pasó. La solución fue solo esperar un poco.
Detalles:
Había emitido una consulta DELETE para eliminar aproximadamente 900,000 de aproximadamente 1 millón de filas.
Ejecuté esto por error (elimina solo el 10% de las filas):
DELETE FROM table WHERE MOD(id,10) = 0
En lugar de esto (elimina el 90% de las filas):
DELETE FROM table WHERE MOD(id,10) != 0
Quería eliminar el 90% de las filas, no el 10%. Así que eliminé el proceso en la línea de comando de MySQL, sabiendo que revertiría todas las filas que había eliminado hasta ahora.
Luego ejecuté el comando correcto inmediatamente y recibí un lock timeout exceeded
error poco después. Me di cuenta de que el bloqueo en realidad podría ser el rollback
de la consulta eliminada que aún se realiza en segundo plano. Así que esperé unos segundos y volví a ejecutar la consulta.