Desempenho e monitorização

Otimizar a tabela wp_options e os dados do tipo "autoload"

Revisto a 6 min de leitura WordPress desempenho base de dados

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

Algo não bate certo ou mudou? Diga-nos e revemos.