Desempenho e monitorização
Otimizar a tabela wp_options e os dados do tipo "autoload"
A tabela wp_options guarda opções do WordPress, dos plugins e dos temas. Algumas são carregadas em conjunto como autoload para evitar pesquisas repetidas. Se esse conjunto crescer demasiado, pode aumentar o trabalho de leitura, desserialização e memória, mesmo que utilize cache de objetos.
Não se consulta necessariamente cada opção em separado nem em cada acesso ao servidor: o WordPress reutiliza o conjunto alloptions, e uma cache de página pode evitar executar o WordPress por completo.
Medir sem alterar dados
Confirme o prefixo da sua instalação. Os exemplos usam wp_options; em multisite deve identificar o site e a tabela correspondente. A partir do separador SQL do phpMyAdmin, calcule o número e os bytes:
SELECT COUNT(*) AS opciones, COALESCE(SUM(OCTET_LENGTH(option_value)), 0) AS bytes, ROUND(COALESCE(SUM(OCTET_LENGTH(option_value)), 0) / 1024, 2) AS kib FROM wp_options WHERE autoload IN ('yes', 'on', 'auto-on', 'auto');
A consulta inclui os valores que o WordPress atual considera carregados automaticamente por predefinição. Uma instalação pode filtrá-los; consulte a função de valores autoload e o comportamento da sua versão.
O Diagnóstico (Site Health) pode avisar se o conjunto ultrapassar o seu limiar, que depende da versão e dos filtros. Não existe um tamanho universal que garanta um problema: relacione a medição com a memória e os tempos reais.
Localizar opções grandes
SELECT option_name, autoload, OCTET_LENGTH(option_value) AS bytes FROM wp_options WHERE autoload IN ('yes', 'on', 'auto-on', 'auto') ORDER BY OCTET_LENGTH(option_value) DESC LIMIT 20;
Comece pelos nomes e tamanhos. Não precisa de exportar os valores completos para definir prioridades; podem conter credenciais ou dados de utilizadores.
Identifique o plugin ou tema responsável procurando o nome exato no seu código e documentação. Desativado não significa abandonado: os seus dados podem ser necessários ao reativá-lo. Teste uma limpeza ou uma alteração de autoload num clone e com cópia recuperável, utilizando a API do WordPress ou a ferramenta do componente.
Não edite valores serializados nem mude em massa todas as opções para não-autoload. Poderia danificar dados ou substituir um carregamento conjunto por muitas consultas individuais.
Rever toda a tabela
Se o autoload não explicar o tamanho, repita a consulta sem o filtro:
SELECT option_name, autoload, OCTET_LENGTH(option_value) AS bytes FROM wp_options ORDER BY OCTET_LENGTH(option_value) DESC LIMIT 20;
Os bytes dos valores não incluem todo o espaço da tabela e dos índices. As contagens que uma ferramenta mostra para InnoDB podem ser estimadas; utilize COUNT(*) quando precisar de uma contagem exata, tendo em conta o seu custo em tabelas grandes.
Cron, transientes e sessões
Se a opção cron crescer, reveja as tarefas agendadas e o componente que as acrescenta. Não elimine nem edite a sua estrutura serializada. O guia do WP-Cron explica como mudar o acionamento sem parar as tarefas necessárias.
Os transientes têm uma validade máxima e podem desaparecer antes. Consoante a configuração, são guardados em tabelas ou em cache persistente; nem todos são eliminados assim que atingem a sua data. Para inspecionar sem mostrar valores:
wp transient list --fields=name,expiration
Se validou a cópia e precisa de eliminar os expirados, utilize wp transient delete --expired. Se reaparecerem em excesso, corrija o componente que os gera.
As linhas de sessões dependem do plugin; não são necessariamente os inícios de sessão padrão do WordPress. Uma limpeza genérica por uma coincidência de nome pode fazer perder carrinhos ou trabalho em curso. Utilize a retenção e a ferramenta do componente responsável.
Índices e Redis
O WordPress já cria índices nas suas tabelas. Antes de acrescentar outro, verifique os existentes:
SHOW INDEX FROM wp_options;
Reveja o plano da consulta lenta com EXPLAIN e teste qualquer índice num clone. Não acrescente um índice composto só porque a tabela ocupa muito: também custa espaço e trabalho em cada escrita.
A cache de objetos com Redis pode reduzir leituras repetidas, mas não dispensa a revisão de um conjunto de opções desproporcionado. Após cada alteração, compare os tempos, a memória, a configuração e as tarefas para verificar que a melhoria não alterou o funcionamento.
Também lhe pode ser útil
- Consultas SQL lentas do tipo "SELECT SQL_CALC_FOUND_ROWS" Diagnostique consultas lentas do WordPress com SQL_CALC_FOUND_ROWS, identifique a sua origem e valid...
- Consultas SQL para limpar dados órfãos e purgar a base de dados do WordPress Limpe dados órfãos, revisões e transientes do WordPress com consultas verificadas, cópia recuperável...
- Diagnosticar consultas LEFT JOIN lentas no WordPress Analise consultas lentas de taxonomias com LEFT JOIN, compare planos e alternativas numa cópia e evi...
- 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...
Algo não bate certo ou mudou? Diga-nos e revemos.