Manifesto Técnico: A Maldição do Autoload Transiente no banco de dados do WordPress
Eu já vi sites morrerem por causa de um simples ‘SELECT * FROM wp_options WHERE autoload = “yes”‘. Parece inofensivo, né? Mas não é. Em uma manhã de terça-feira, um cliente me liga: ‘O site está lentíssimo, o admin nem carrega mais’. Entro no servidor, top no MySQL, e lá estava: 2,3 GB na tabela wp_options, 95% com autoload ‘yes’. A verdade: transientes expirados, locks de cache, settings de plugins zumbis. O pior: tudo regido pela GPL, então cada plugin faz o que quer. Este manifesto é um grito de guerra contra a negligência com autoload. Prepare-se: vou expor o que a documentação nunca conta.
O Problema: Autoload Transiente Invisível
Transientes no WordPress são como bilhetes post-it: úteis, mas facilmente esquecidos. Quando um plugin define set_transient( 'meu_cache', $dados, 3600 ), ele cria uma entrada em wp_options com autoload = ‘yes’. O problema? Se o cache expirar e o plugin não limpar, o autoload permanece. Multiplique isso por dezenas de plugins, temas, e você tem uma bomba-relógio de banco de dados.
Casos Reais de Estresse
- WooCommerce + Cache de Produtos: Cada variação de produto gera transientes. Sem uma limpeza adequada, a tabela wp_options incha. Em um site com 10.000 produtos, já vi 500 MB de transientes mortos.
- Plugins de SEO: Rank Math e Yoast criam transientes para sitemaps. Em sites com muitos posts, o autoload acumula. Um cliente tinha 300 MB de transientes do Yoast, mesmo com o cache reiniciado a cada hora.
- Redis/Object Cache: Paradoxalmente, plugins de cache podem piorar o autoload. Eles armazenam chaves de cache em wp_options com autoload, e quando o cache externo falha, o banco fica sobrecarregado.
O Diagnóstico
Como identificar o problema? Execute no MySQL:
SELECT option_name, LENGTH(option_value) as bytes, autoload
FROM wp_options
WHERE autoload = 'yes'
ORDER BY bytes DESC
LIMIT 20;
Se vir opções como ‘_transient_*’, ‘_site_transient_*’ ou opções de plugins com mais de 100 KB, você tem um problema. Especialmente perigosos: transientes que nunca expiram (timeout = 0).
Manifesto: Soluções Extremas
- Desabilitar Autoload para Transientes: Adicione no wp-config.php:
define('WP_OPTIONS_AUTOLOAD_TRANSIENTS', false);
Isso força transientes a serem carregados sob demanda. Cuidado com impacto em performance de cache. - Limpeza Robótica: Use cron jobs diários para deletar transientes expirados:
DELETE FROM wp_options WHERE option_name LIKE '%_transient_%' AND (option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP()); - Auditoria de Plugins: Todo plugin que usa opções com autoload deve ser revisado. Ferramenta: Query Monitor mostra queries lentas. Se um plugin faz SELECT na wp_options a cada página, denuncie.
- Banco de Dados Otimizado: Converta wp_options para InnoDB (se MyISAM) e use índices. Melhora a performance de queries com autoload.
Conclusão (sem dizer conclusão)
Autoload transiente é um assassino silencioso. Ignore por sua conta e risco. A GPL permite que plugins poluam seu banco; cabe a você proteger seu site. Este manifesto é um lembrete: cada byte em wp_options com autoload é uma bala no cano da sua performance. Aja antes que sua página não carregue mais.
"O banco de dados é o coração do WordPress. Autoload transiente é a artéria entupida."