[SQL] Limpeza Profunda do Banco de Dados WordPress

🧹 Limpeza Profunda do Banco de Dados WordPress

Objetivo: Remover “sujeira” (dados órfãos, revisões antigas, transients expirados, caches desnecessários) que podem deixar o site lento ou causar comportamentos estranhos, como a desformatação de shortcodes .

Atenção: Sempre faça um backup completo (banco de dados + arquivos) antes de executar qualquer comando SQL. Esta aula é para administradores experientes.


📌 Comandos SQL para limpeza em um site WordPress normal

Conecte-se ao phpMyAdmin (ou outra ferramenta) e execute os comandos abaixo, um por um, na tabela correspondente ao seu banco de dados.

Ação Comando SQL (executar no phpMyAdmin) O que faz
Remover revisões antigas de posts DELETE FROM wp_posts WHERE post_type = 'revision'; Apaga todas as revisões de posts e páginas, liberando espaço e eliminando metadados associados (reduz a tabela wp_posts).
Remover posts na lixeira (trash) DELETE FROM wp_posts WHERE post_status = 'trash'; Elimina definitivamente os posts que estavam na lixeira.
Remover metadados órfãos (postmeta) DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts p ON p.ID = pm.post_id WHERE p.ID IS NULL; Apaga metadados que pertencem a posts que já foram excluídos. Esses “órfãos” acumulam lixo e lentidão.
Remover comentários não aprovados e spam DELETE FROM wp_comments WHERE comment_approved IN ('0', 'spam', 'trash'); Limpa comentários pendentes, spam e lixeira de comentários.
Remover metadados de comentários órfãos DELETE cm FROM wp_commentmeta cm LEFT JOIN wp_comments c ON c.comment_ID = cm.comment_id WHERE c.comment_ID IS NULL; Elimina metadados de comentários que não existem mais.
Limpar transients expirados (opções temporárias) DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%' OR option_name LIKE '_transient_%'; Remove todas as opções de cache transitório (transients) – dados temporários de plugins que não são mais necessários.
Remover cache oEmbed órfão DELETE FROM wp_postmeta WHERE meta_key LIKE '_oembed_%'; Limpa o cache de incorporações (oEmbed) que pode estar corrompido ou desatualizado – útil para resolver problemas com .
Otimizar todas as tabelas (reorganizar espaço) OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options, wp_comments, wp_commentmeta, wp_terms, wp_termmeta; (adicione outras tabelas se desejar) Reorganiza o armazenamento físico das tabelas, recuperando espaço e melhorando a performance (executar após limpeza).

🌐 Adaptação para Multisite (rede de blogs)

No Multisite, cada blog tem suas próprias tabelas com o prefixo wp_ID_do_blog_ (ex: wp_2_posts, wp_2_postmeta). Além disso, existem tabelas globais (como wp_sites, wp_blogs, wp_signups).

Para limpar todos os blogs de uma vez, use um plugin como WP-Sweep (ativado em rede). Ele varre todas as tabelas automaticamente.

Se preferir executar comandos SQL manuais por blog, repita os comandos acima trocando o prefixo wp_ pelo prefixo de cada blog. Exemplo para o blog com ID 2:

DELETE FROM wp_2_postmeta WHERE meta_key LIKE '_oembed_%';
DELETE FROM wp_2_options WHERE option_name LIKE '_transient_%';
DELETE FROM wp_2_posts WHERE post_type = 'revision';
-- etc.

Além disso, você pode limpar as tabelas globais do Multisite:

Ação Comando SQL (global) O que faz
Remover blogs marcados como “excluídos” (deleted = 1) DELETE FROM wp_blogs WHERE deleted = 1; Elimina permanentemente blogs que foram excluídos da rede.
Remover registros de signup órfãos DELETE FROM wp_signups WHERE active = 0 AND registered < DATE_SUB(NOW(), INTERVAL 30 DAY); Limpa registros de inscrições pendentes com mais de 30 dias.
Remover metadados de sites órfãos DELETE sgm FROM wp_sitemeta sgm LEFT JOIN wp_blogs b ON b.blog_id = sgm.site_id WHERE b.blog_id IS NULL; Apaga metadados de sites que não existem mais na rede.

🔧 Comando PHP para limpeza profunda via WP-CLI (alternativa avançada)

Se você tem acesso SSH e o WP-CLI instalado, pode executar uma limpeza ainda mais completa com um único comando (aplicável a todo o Multisite):

# Limpar revisões de posts de todos os blogs da rede
wp post delete --force --revisions --network

# Limpar transients expirados da rede
wp transient delete --all --network

# Limpar cache oEmbed de todos os blogs
wp post meta delete --all --meta-key=_oembed_* --network

# Otimizar todas as tabelas do banco de dados
wp db optimize

Esses comandos são executados no terminal do servidor (ex: DreamHost SSH).


📖 Resumo do que cada ação elimina (para seu caderno)

  • Revisões e lixeira: Versões antigas de posts/páginas que ocupam espaço e podem conter metadados desnecessários.
  • Metadados órfãos: Campos personalizados (postmeta, commentmeta, termmeta, usermeta) cujo objeto pai (post, comentário, termo, usuário) foi excluído. Esses são os principais vilões da lentidão e de comportamentos estranhos.
  • Transients expirados: Dados temporários de plugins que o WordPress deveria limpar sozinho, mas muitas vezes acumulam.
  • Cache oEmbed: Respostas salvas de serviços externos (YouTube, Twitter, etc.). Pode ficar corrompido e atrapalhar o shortcode .
  • Otimização de tabelas: Libera espaço físico no disco e reorganiza os índices.

✅ Próximos passos recomendados para o seu caso

  1. Faça um backup completo (banco + arquivos).
  2. Instale e ative o plugin WP-Sweep em rede.
  3. Execute a limpeza de Post Meta, oEmbed Cache e Transients pelo painel da rede (Ferramentas → Sweep).
  4. Após a limpeza, recarregue os posts que usam e verifique se o comportamento de desformatação persiste.
  5. Se o problema continuar, restaure o backup e execute comandos SQL manuais (um por um) para identificar a causa raiz.

Lembre-se: Manutenção preventiva a cada 3-6 meses evita acúmulo de sujeira e mantém o site leve e rápido.


Esta aula foi gerada com base nas experiências e tentativas de resolver a desformatação do shortcode no Multisite Portanova. A limpeza profunda do banco de dados é uma das práticas mais subestimadas e eficazes.



Média: 2.7 (40 votos)