Se ha excedido el tiempo de espera de bloqueo de mysql; intente reiniciar la transacción

26

estamos ejecutando la aplicación java, ejecutándose por años, el back-end es db es MySQL, actualizado recientemente a mysql 5.6. Todo estaba funcionando bien, la semana pasada comenzó a aparecer este error Se excedió el tiempo de espera de bloqueo; intente reiniciar la transacción que parece que nunca se detiene, no sé qué hacer con este error para detener. por qué está ocurriendo de repente

JAVAC
fuente

Respuestas:

29

Puede establecer la variable innodb_lock_wait_timeout = 100 para el tiempo de bloqueo en 100 segundos.

mysql> set innodb_lock_wait_timeout=100;

Query OK, 0 rows affected (0.02 sec)

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 100   |
+--------------------------+-------+

La transacción que es tiempo de espera, intente bloquear la tabla que está en espera por otro proceso. y su variable de tiempo de espera establecida con un pequeño número de segundos. entonces muestra error. Puede ver más estado por el comando.

SHOW ENGINE INNODB STATUS\G 

Puede ver la lista de tablas bloqueadas por-

 show open tables where in_use>0;

Ahora vea el hilo que está usando esta tabla

  show full processlist;

ahora puedes matar ese hilo o esperar para completarlo.

Hitesh Mundra
fuente
Continuemos esta discusión en el chat .
JAVAC
Gracias por esta información, pero ¿cómo se puede llegar a la raíz del problema cuando continúan los bloqueos, incluso en tablas muy simples con pequeñas actualizaciones (como incrementar o actualizar un solo campo).
Wouter
-1

Si utiliza una versión de MySQL inferior a 5.0, no puede cambiar la variable ni siquiera para la sesión o el alcance global. La mejor solución es capturar la consulta y ejecutarla después de que el tráfico sea lento.

Sherry_MySQL
fuente
2
OP dice que están usando 5.6, que (supongo) es 5.0 o superior.
RDFozz