Desempenho e monitorização
Consultas SQL para limpar dados órfãos e purgar a base de dados do WordPress
Uma base de dados antiga do WordPress pode acumular metadados sem objeto associado, revisões e dados temporários. Antigo ou grande não significa dispensável. Este guia permite identificar candidatos e preparar uma limpeza limitada; não é um lote de comandos para colar em produção.
Preparar uma cópia e delimitar o site
Verifique a base de dados e o prefixo reais no wp-config.php. Os exemplos usam wp_. Em multisite, as tabelas de utilizadores podem ser partilhadas e cada site tem o seu próprio conjunto de tabelas: não aplique estes exemplos sem rever essa estrutura.
Ensaie num clone. Antes de limpar a produção, prepare uma cópia recente e controle as escritas de visitas, cron, filas e integrações. Mostrar uma página de manutenção não trava necessariamente todas essas escritas.
A partir da instalação do WordPress, exporte para um caminho privado fora das raízes web. Neste exemplo, crie previamente ~/copias-docs com permissões 700 e verifique que não está publicado:
umask 077 wp db export "$HOME/copias-docs/antes-limpieza.sql" && sha256sum "$HOME/copias-docs/antes-limpieza.sql" > "$HOME/copias-docs/antes-limpieza.sql.sha256"
Se a exportação falhar, o ficheiro pode estar incompleto: não continue. Utilize nomes novos para não substituir uma cópia anterior, descarregue a cópia e verifique um restauro numa base de dados temporária. O checksum verifica a integridade, não demonstra que o restauro funciona.
Inspecionar metadados de artigos órfãos
Execute primeiro a contagem e uma amostra no phpMyAdmin:
SELECT COUNT(*) AS filas_afectadas FROM wp_postmeta pm LEFT JOIN wp_posts p ON pm.post_id = p.ID WHERE p.ID IS NULL; SELECT pm.meta_id, pm.post_id, pm.meta_key FROM wp_postmeta pm LEFT JOIN wp_posts p ON pm.post_id = p.ID WHERE p.ID IS NULL LIMIT 50;
Reveja porque existem e se há importações ou processos incompletos. Se confirmou que são dispensáveis, esta é a eliminação equivalente:
DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts p ON pm.post_id = p.ID WHERE p.ID IS NULL;
Em tabelas grandes, o programador deve preparar lotes limitados e controlar os bloqueios; não execute uma eliminação massiva só porque a amostra é pequena.
Inspecionar metadados de utilizadores órfãos
SELECT COUNT(*) AS filas_afectadas FROM wp_usermeta um LEFT JOIN wp_users u ON um.user_id = u.ID WHERE u.ID IS NULL; SELECT um.umeta_id, um.user_id, um.meta_key FROM wp_usermeta um LEFT JOIN wp_users u ON um.user_id = u.ID WHERE u.ID IS NULL LIMIT 50;
Só depois de rever o conjunto, o contexto de multisite e a cópia, a eliminação equivalente é:
DELETE um FROM wp_usermeta um LEFT JOIN wp_users u ON um.user_id = u.ID WHERE u.ID IS NULL;
Transações e caches
Se todas as tabelas alteradas forem InnoDB, pode ensaiar uma única eliminação revista dentro de uma transação, na mesma sessão de base de dados:
START TRANSACTION;
-- Execute um único DELETE revisto e verifique a contagem.
ROLLBACK;
Não use COMMIT até concluir as verificações previstas. O MyISAM e as alterações de estrutura não oferecem esse mesmo retorno; não converta tabelas como passo improvisado de uma limpeza. Uma transação pode manter bloqueios enquanto está aberta.
O SQL direto não executa as APIs nem atualiza todas as caches do WordPress. Após uma limpeza validada, invalide as caches afetadas com um âmbito conhecido, sem esvaziar indiscriminadamente o Redis de outros sites.
Etiquetas vazias
Liste as etiquetas incluindo as vazias e reveja a coluna count:
wp term list post_tag --hide_empty=0 --fields=term_id,name,count
Um valor zero é um candidato a revisão, não uma ordem de eliminação: pode existir conteúdo não publicado ou uma razão editorial para manter a etiqueta. Para eliminar uma etiqueta confirmada, utilize a API através do WP-CLI, substituindo o marcador pelo seu ID real:
wp term delete post_tag ID_REVISADO
Não elimine relações de taxonomias diretamente com SQL. Verifique depois as ligações, a navegação e o conteúdo relacionado.
Artigos cujo autor já não existe
Não os elimine nem reatribua todos os tipos de conteúdo sem os rever. Esta consulta permite localizar candidatos:
SELECT p.ID, p.post_type, p.post_status, p.post_title, p.post_author FROM wp_posts p LEFT JOIN wp_users u ON p.post_author = u.ID WHERE u.ID IS NULL LIMIT 50;
Alguns registos podem usar o autor 0 legitimamente. Para um artigo cuja autoria deva ser corrigida, escolha um utilizador válido e utilize a edição do WordPress ou wp post update com os identificadores revistos. Assim executam-se as operações da aplicação que um UPDATE direto omitiria.
Revisões e transientes
Para rever revisões antigas, utilize uma data UTC coerente com a coluna:
SELECT ID, post_parent, post_modified_gmt FROM wp_posts WHERE post_type = 'revision' AND post_modified_gmt < DATE_SUB(UTC_TIMESTAMP(), INTERVAL 10 DAY) ORDER BY ID LIMIT 50;
Dez dias é apenas um exemplo. Decida a retenção de acordo com as suas necessidades e elimine as revisões selecionadas com uma ferramenta que use as APIs do WordPress, não apagando linhas de wp_posts em bloco e deixando os seus metadados.
Para rever os transientes sem mostrar os seus valores e depois retirar apenas os expirados:
wp transient list --fields=name,expiration
wp transient delete --expired
A lista inclui transientes não expirados; verifique a sua validade. Com cache persistente ou multisite, reveja o âmbito da ferramenta antes de interpretar o que aparece nas tabelas.
No fim, valide o frontend, a administração, os utilizadores, as encomendas e as tarefas. Mantenha a cópia durante o período de observação. Se for preciso restaurar, coordene as escritas novas para não perder encomendas ou alterações posteriores à cópia.
Também lhe pode ser útil
- Melhorar o desempenho da base de dados do WordPress com o Index WP MySQL For Speed Avalie índices do WordPress com o Index WP MySQL For Speed, reveja as alterações antes de as aplicar...
- Otimizar a tabela wp_options e os dados do tipo "autoload" Consultas SQL para medir os dados autoload da wp_options, localizar as opções que mais ocupam e limp...
- Acelerar e otimizar o WordPress e o WooCommerce passo a passo Guia completo para acelerar o WordPress e o WooCommerce - PHP e OPcache, cron, LiteSpeed Cache confi...
- Como carregar o script do reCAPTCHA com o Contact Form 7 apenas onde for necessário Avalie o custo do reCAPTCHA no Contact Form 7 e limite o seu carregamento só depois de identificar t...
Algo não bate certo ou mudou? Diga-nos e revemos.