Como corrigir Deadlock found when trying to get lock
O que é o erro Deadlock no MySQL do WordPress?
Deadlock found when trying to get lock é o erro que o MySQL devolve quando duas ou mais transações se bloqueiam mutuamente: cada uma segura um lock que a outra precisa, e nenhuma avança. Para não travar o banco, o InnoDB detecta o impasse e desfaz uma das transações com esse erro. No WordPress, isso aparece quando vários processos escrevem ao mesmo tempo na mesma tabela, por exemplo plugins de cache, de estatísticas ou o WooCommerce processando pedidos em paralelo. Não é corrupção: é contenção de escrita, e a operação abortada normalmente pode ser repetida.
Como identificar
- O log de erros do PHP ou do MySQL mostra “Deadlock found when trying to get lock; try restarting transaction”.
- Uma ação no painel falha de forma intermitente e funciona ao ser repetida segundos depois.
- O erro surge em horários de pico de tráfego ou quando o cron do WordPress roda tarefas pesadas.
- Plugins de estatística, fila ou WooCommerce registram falhas de gravação esporádicas no banco.
Como prevenir
- Use um cron real do servidor com execução espaçada em vez do WP-Cron em sites movimentados
- Mantenha plugins de cache, fila e estatística atualizados para evitar bugs de concorrência
- Evite transações longas e operações de escrita em massa nos horários de pico de tráfego
Causa
- Duas transações gravando na mesma tabela em ordem inversa de locks, travando uma à outra.
- Plugins de cache, fila ou estatística escrevendo em paralelo na wp_options ou em tabelas próprias.
- Cron do WordPress disparando tarefas pesadas de escrita ao mesmo tempo que requisições de usuário.
- WooCommerce processando muitos pedidos simultâneos que disputam locks nas tabelas de pedidos.
- Transações longas que seguram locks por tempo demais durante picos de escrita concorrente.
Como resolver
- Entenda que o deadlock é recuperável: o InnoDB aborta apenas uma das transações para destravar; a outra conclui normalmente. Muitas vezes basta repetir a operação que falhou, pois o impasse momentâneo já se desfez.
- Identifique o plugin ou processo envolvido: veja no log de erros o horário e a tabela citada no deadlock. Cruze com plugins de cache, estatística ou fila ativos. Desative temporariamente o suspeito e observe se os deadlocks param.
- Reduza a concorrência do cron: se o cron do WordPress dispara tarefas pesadas em paralelo, troque o WP-Cron por um cron real do servidor com execução espaçada, para as escritas não competirem pelos mesmos locks ao mesmo tempo.
- Atualize os plugins envolvidos: deadlocks recorrentes ligados a um plugin específico costumam ser bugs de concorrência já corrigidos. Atualize o plugin à última versão e verifique o changelog por correções de gravação no banco.
- Acompanhe a frequência depois do ajuste: deadlocks raros e isolados são normais em bancos transacionais. Só preocupe-se se forem frequentes; nesse caso, leve o trecho do InnoDB status ao suporte da hospedagem para análise mais fina.
-- Veja os detalhes do ultimo deadlock detectado pelo InnoDB
SHOW ENGINE INNODB STATUS;
-- Procure a secao 'LATEST DETECTED DEADLOCK' na saida: ela mostra as duas
-- transacoes, as queries e as tabelas que se bloquearam.
-- Liste transacoes ativas e ha quanto tempo seguram locks (MySQL 8)
SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id, trx_query
FROM information_schema.innodb_trx
ORDER BY trx_started;














