{"id":2249,"date":"2026-10-01T21:55:41","date_gmt":"2026-10-02T00:55:41","guid":{"rendered":"https:\/\/www.especialistadeseo.com.br\/blog\/tratamento-de-deadlocks-no-innodb-durante-atualizacoes-concorrentes-da-wp_options\/"},"modified":"2026-10-01T21:55:41","modified_gmt":"2026-10-02T00:55:41","slug":"tratamento-de-deadlocks-no-innodb-durante-atualizacoes-concorrentes-da-wp_options","status":"publish","type":"post","link":"https:\/\/www.especialistadeseo.com.br\/blog\/tratamento-de-deadlocks-no-innodb-durante-atualizacoes-concorrentes-da-wp_options\/","title":{"rendered":"Tratamento de Deadlocks no InnoDB Durante Atualiza\u00e7\u00f5es Concorrentes da wp_options"},"content":{"rendered":"\n\n<p class=\"lead wp-block-paragraph\">A tabela <code>wp_options<\/code> guarda desde o nome do seu site at\u00e9 dados tempor\u00e1rios que plugins gravam a cada segundo. Quando muitas pessoas usam o site ao mesmo tempo, dois processos do PHP podem tentar atualizar registros diferentes dessa mesma tabela em ordens trocadas. Como um fica esperando o outro liberar o acesso, cria-se um travamento m\u00fatuo chamado deadlock. O MySQL aborta uma das opera\u00e7\u00f5es na hora e o usu\u00e1rio v\u00ea na tela o aviso de &#8220;Houve um erro cr\u00edtico no seu site&#8221;. Veja como achar essas consultas travadas e como resolver isso em definitivo em <a href=\"https:\/\/www.especialistadeseo.com.br\/otimizacao-de-sites.php\">Otimiza\u00e7\u00e3o de Sites e Servidores<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full featured-article-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"675\" src=\"https:\/\/www.especialistadeseo.com.br\/blog\/wp-content\/uploads\/2026\/10\/post_4_Tratamento_de_Deadlocks_no_Inn-2.jpg\" alt=\"Tratamento de deadlocks no InnoDB na wp_options do WordPress\" class=\"wp-image-2248\" srcset=\"https:\/\/www.especialistadeseo.com.br\/blog\/wp-content\/uploads\/2026\/10\/post_4_Tratamento_de_Deadlocks_no_Inn-2.jpg 1200w, https:\/\/www.especialistadeseo.com.br\/blog\/wp-content\/uploads\/2026\/10\/post_4_Tratamento_de_Deadlocks_no_Inn-2-300x169.jpg 300w, https:\/\/www.especialistadeseo.com.br\/blog\/wp-content\/uploads\/2026\/10\/post_4_Tratamento_de_Deadlocks_no_Inn-2-1024x576.jpg 1024w, https:\/\/www.especialistadeseo.com.br\/blog\/wp-content\/uploads\/2026\/10\/post_4_Tratamento_de_Deadlocks_no_Inn-2-768x432.jpg 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><figcaption>Diagn\u00f3stico de travas de linha e otimiza\u00e7\u00e3o da tabela wp_options no MySQL.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">O que voc\u00ea vai aprender<\/h2>\n\n\n\n<ul class=\"toc-list wp-block-list\">\n    <li><a href=\"#como-acontece-deadlock\">1. Como dois processos travam um ao outro no MySQL<\/a><\/li>\n    <li><a href=\"#olhando-o-status-innodb\">2. Como ver o \u00faltimo deadlock com SHOW ENGINE INNODB STATUS<\/a><\/li>\n    <li><a href=\"#o-perigo-dos-transients\">3. Por que os transients e o autoload causam essas brigas<\/a><\/li>\n    <li><a href=\"#usando-o-redis\">4. A solu\u00e7\u00e3o definitiva: migrar transients para o Redis<\/a><\/li>\n    <li><a href=\"#limpando-a-tabela\">5. Comandos SQL para limpar e indexar a wp_options<\/a><\/li>\n    <li><a href=\"#ajuda-especializada\">6. Como deixar seu banco de dados est\u00e1vel<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"como-acontece-deadlock\">1. Como dois processos travam um ao outro no MySQL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O motor InnoDB do MySQL usa bloqueios em n\u00edvel de linha para garantir que ningu\u00e9m altere um dado que j\u00e1 est\u00e1 sendo modificado por outra pessoa. Um deadlock acontece quando a situa\u00e7\u00e3o fica assim:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n    <li>O <strong>Processo A<\/strong> bloqueia a linha do token do usu\u00e1rio e precisa atualizar o timestamp do cron.<\/li>\n    <li>O <strong>Processo B<\/strong> j\u00e1 bloqueou a linha do timestamp do cron e precisa atualizar o token do usu\u00e1rio.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Nenhum dos dois consegue terminar porque cada um est\u00e1 esperando a linha que o outro segurou. O MySQL tem um detector autom\u00e1tico que percebe o impasse e cancela (faz rollback) uma das duas transa\u00e7\u00f5es com o erro <code>Deadlock found when trying to get lock; try restarting transaction<\/code>. Se o plugin ou tema n\u00e3o tiver tratamento para tentar de novo, o usu\u00e1rio v\u00ea uma tela de erro ou perde o carrinho.<\/p>\n\n\n\n<div class=\"cta-incontent-box\" style=\"background: linear-gradient(180deg, #18181b 0%, #121217 100%); border: 1px solid #3f3f46; border-left: 4px solid #3b82f6; border-radius: 6px; padding: 1.75rem; margin: 2.5rem 0; box-shadow: 0 10px 25px rgba(0,0,0,0.3);\">\n    <h4 style=\"color: #ffffff; font-size: 1.15rem; margin-top: 0; margin-bottom: 0.5rem;\">\n        Seu WordPress apresenta erro cr\u00edtico sem motivo aparente?\n    <\/h4>\n    <p style=\"color: #d4d4d8; font-size: 0.95rem; line-height: 1.6; margin-bottom: 1.25rem;\">\n        Deadlocks na wp_options quebram sess\u00f5es e assustam clientes no checkout. N\u00f3s identificamos quais plugins est\u00e3o gerando essas brigas de escrita no seu banco.\n    <\/p>\n    <button onclick=\"showModal()\" class=\"btn-solid\" style=\"background-color: #ffffff; color: #09090b; border: none; padding: 0.75rem 1.5rem; font-weight: 600; font-size: 0.9rem; border-radius: 4px; cursor: pointer;\">\n        Solicitar an\u00e1lise de banco de dados &rarr;\n    <\/button>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"olhando-o-status-innodb\">2. Como ver o \u00faltimo deadlock com SHOW ENGINE INNODB STATUS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para descobrir quais queries SQL exatas provocaram o \u00faltimo conflito, acesse o MySQL pelo terminal ou phpMyAdmin e rode este comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SHOW ENGINE INNODB STATUS\\G<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Procure pelo bloco chamado <code>LATEST DETECTED DEADLOCK<\/code>. L\u00e1 voc\u00ea ver\u00e1 o texto completo das duas consultas e os IDs dos processos envolvidos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>*** (1) TRANSACTION:\nUPDATE `wp_options` SET `option_value` = '...' WHERE `option_name` = '_transient_cart_session'\n\n*** (2) TRANSACTION:\nUPDATE `wp_options` SET `option_value` = '...' WHERE `option_name` = 'cron'\n\n*** WE ROLL BACK TRANSACTION (1)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"o-perigo-dos-transients\">3. Por que os transients e o autoload causam essas brigas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Em quase todos os sites onde encontro deadlocks, a culpa \u00e9 da quantidade de op\u00e7\u00f5es marcadas com <code>autoload = 'yes'<\/code>. O WordPress carrega todas as op\u00e7\u00f5es com autoload de uma vez s\u00f3 em cada p\u00e1gina que abre. Se voc\u00ea tem 50.000 transients antigos acumulados de plugins desinstalados, essa consulta de leitura fica muito pesada e segura travas de intervalo (gap locks) na tabela enquanto outras threads tentam atualizar dados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esse tipo de investiga\u00e7\u00e3o detalhada faz parte da nossa <a href=\"https:\/\/www.especialistadeseo.com.br\/auditoria-tecnica.php\">Auditoria T\u00e9cnica Especializada<\/a>.<\/p>\n\n\n\n<div class=\"cta-incontent-box\" style=\"background: linear-gradient(180deg, #18181b 0%, #121217 100%); border: 1px solid #3f3f46; border-left: 4px solid #f59e0b; border-radius: 6px; padding: 1.75rem; margin: 2.5rem 0; box-shadow: 0 10px 25px rgba(0,0,0,0.3);\">\n    <h4 style=\"color: #ffffff; font-size: 1.15rem; margin-top: 0; margin-bottom: 0.5rem;\">\n        Cuidado ao rodar comandos de DELETE direto no banco de produ\u00e7\u00e3o\n    <\/h4>\n    <p style=\"color: #d4d4d8; font-size: 0.95rem; line-height: 1.6; margin-bottom: 1.25rem;\">\n        Apagar linhas da wp_options sem validar o que \u00e9 transient e o que \u00e9 configura\u00e7\u00e3o pode quebrar seu tema. Fa\u00e7a isso com apoio de especialistas.\n    <\/p>\n    <button onclick=\"showModal()\" class=\"btn-solid\" style=\"background-color: #ffffff; color: #09090b; border: none; padding: 0.75rem 1.5rem; font-weight: 600; font-size: 0.9rem; border-radius: 4px; cursor: pointer;\">\n        Agendar auditoria de banco &rarr;\n    <\/button>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"usando-o-redis\">4. A solu\u00e7\u00e3o definitiva: migrar transients para o Redis<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A melhor solu\u00e7\u00e3o t\u00e9cnica para acabar com deadlocks na <code>wp_options<\/code> \u00e9 tirar os dados tempor\u00e1rios do disco e colocar na mem\u00f3ria RAM usando o <strong>Redis Object Cache<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando o Redis est\u00e1 ativo com o driver <code>phpredis<\/code>, o WordPress para de gravar transients no MySQL. Todas as sess\u00f5es, tokens e caches de curta dura\u00e7\u00e3o passam a ser gravados direto na mem\u00f3ria RAM com expira\u00e7\u00e3o autom\u00e1tica. A tabela <code>wp_options<\/code> fica apenas com as configura\u00e7\u00f5es fixas do site e os deadlocks somem por completo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"limpando-a-tabela\">5. Comandos SQL para limpar e indexar a wp_options<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se voc\u00ea j\u00e1 tem muitos registros \u00f3rf\u00e3os acumulados, fa\u00e7a um backup do banco de dados e rode esta limpeza no MySQL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Remove transients antigos acumulados\nDELETE FROM `wp_options` WHERE `option_name` LIKE ('%\\_transient\\_%');\nDELETE FROM `wp_options` WHERE `option_name` LIKE ('%\\_site\\_transient\\_%');\n\n-- Cria \u00edndice composto para acelerar as consultas de autoload\nCREATE INDEX autoload_idx ON wp_options (autoload, option_name);\nOPTIMIZE TABLE wp_options;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Essa limpeza reduz o tempo de carregamento da <code>wp_options<\/code> para menos de 2ms, ajudando diretamente no tempo de resposta geral e nas m\u00e9tricas de <a href=\"https:\/\/www.especialistadeseo.com.br\/core-web-vitals.php\">Core Web Vitals<\/a> e <a href=\"https:\/\/www.especialistadeseo.com.br\/seo-tecnico.php\">SEO T\u00e9cnico<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ajuda-especializada\">6. Como deixar seu banco de dados est\u00e1vel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Erros de banco de dados assustam visitantes e custam vendas. Se voc\u00ea quer deixar seu WordPress est\u00e1vel, r\u00e1pido e preparado para receber milhares de acessos simult\u00e2neos sem travar, fale diretamente com <strong>Jonathan Pav\u00e3o<\/strong>.<\/p>\n\n\n\n<div class=\"cta-incontent-box\" style=\"background: linear-gradient(180deg, #18181b 0%, #121217 100%); border: 1px solid #3f3f46; border-left: 4px solid #22c55e; border-radius: 6px; padding: 1.75rem; margin: 2.5rem 0; box-shadow: 0 10px 25px rgba(0,0,0,0.3);\">\n    <h4 style=\"color: #ffffff; font-size: 1.15rem; margin-top: 0; margin-bottom: 0.5rem;\">\n        Converse comigo pelo WhatsApp\n    <\/h4>\n    <p style=\"color: #d4d4d8; font-size: 0.95rem; line-height: 1.6; margin-bottom: 1.25rem;\">\n        Vamos analisar o seu banco de dados e eliminar os erros cr\u00edticos no seu site.\n    <\/p>\n    <button onclick=\"showModal()\" class=\"btn-solid\" style=\"background-color: #25D366; color: #ffffff; border: none; padding: 0.85rem 1.75rem; font-weight: 600; font-size: 0.95rem; border-radius: 4px; cursor: pointer;\">\n        Conversar no WhatsApp agora &rarr;\n    <\/button>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>A tabela wp_options guarda desde o nome do seu site at\u00e9 dados tempor\u00e1rios que plugins gravam a cada segundo. Quando muitas pessoas usam o&#8230;<\/p>\n","protected":false},"author":1,"featured_media":2248,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-2249","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress-e-infraestrutura"],"_links":{"self":[{"href":"https:\/\/www.especialistadeseo.com.br\/blog\/wp-json\/wp\/v2\/posts\/2249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.especialistadeseo.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.especialistadeseo.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.especialistadeseo.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.especialistadeseo.com.br\/blog\/wp-json\/wp\/v2\/comments?post=2249"}],"version-history":[{"count":0,"href":"https:\/\/www.especialistadeseo.com.br\/blog\/wp-json\/wp\/v2\/posts\/2249\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.especialistadeseo.com.br\/blog\/wp-json\/wp\/v2\/media\/2248"}],"wp:attachment":[{"href":"https:\/\/www.especialistadeseo.com.br\/blog\/wp-json\/wp\/v2\/media?parent=2249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.especialistadeseo.com.br\/blog\/wp-json\/wp\/v2\/categories?post=2249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.especialistadeseo.com.br\/blog\/wp-json\/wp\/v2\/tags?post=2249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}