tempo limite de espera do bloqueio do mysql excedido; tente reiniciar a transação

26

estamos executando o aplicativo java, executando por idades, o back-end é o db é o MySQL, recentemente atualizado para o mysql 5.6. Tudo estava funcionando bem, a semana passada começou a receber esse erro O tempo limite de espera para bloqueio foi excedido; tente reiniciar a transação que parece nunca parar de terminar, não sei o que fazer com esse erro para parar. por que está ocorrendo de repente

JAVAC
fonte

Respostas:

29

Você pode definir a variável innodb_lock_wait_timeout = 100 para o tempo de bloqueio como 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   |
+--------------------------+-------+

A transação que está com tempo limite, tente bloquear a tabela que é retida por outro processo. e sua variável de tempo limite definida com pouco número de segundos. então mostra erro. Você pode ver mais status pelo comando

SHOW ENGINE INNODB STATUS\G 

Você pode ver a lista de tabelas bloqueadas

 show open tables where in_use>0;

Agora veja o thread que está usando esta tabela

  show full processlist;

agora você pode matar esse segmento ou esperar para concluir.

Hitesh Mundra
fonte
Obrigado por essas informações, mas como chegar à raiz do problema quando os bloqueios continuam acontecendo, mesmo em tabelas muito simples com pequenas atualizações (como incrementar ou atualizar um único campo).
Wouter
-1

Se você estiver usando a versão do MySQL menor que 5.0, não poderá alterar a variável nem para a sessão ou para o escopo global. A melhor solução é capturar a consulta e executá-la após o tráfego ser lento.

Sherry_MySQL
fonte
2
O OP diz que está usando a versão 5.6, que (presumo) é 5.0 ou superior.
precisa saber é o seguinte