Desempenho e monitorização

Diagnosticar consultas LEFT JOIN lentas no WordPress

Revisto a 3 min de leitura WordPress desempenho base de dados

Em instalações grandes, uma consulta do WordPress que filtra por categorias ou taxonomias pode demorar muito ao combinar posts e term_relationships, ordenar e limitar resultados. A presença de LEFT JOIN não demonstra por si só que a consulta esteja mal: importam os dados, os filtros, os índices e o plano de execução.

Contexto do caso histórico

Este guia nasceu de incidências com centenas de milhares de artigos e remete para o ticket 54346 do WordPress, onde se estudam consultas de categorias e alternativas com subconsultas.

Os resultados observados em determinadas instalações não garantem tempos de milissegundos para qualquer volume de dados. Também não transformam uma correção do ticket numa correção oficial aplicável a todas as versões.

Identificar a consulta real

  1. Reproduza um URL lento e registe se havia sessão, cache e filtros.
  2. Utilize o PHP X-Ray para localizar a consulta completa e o componente que a gera.
  3. Anote as versões do WordPress, do MySQL ou MariaDB e dos plugins envolvidos.
  4. Numa cópia com dados representativos, reveja o plano com EXPLAIN e os índices existentes.

Compare quantas linhas são examinadas, onde se filtra e como se ordena. Um plano diferente após uma atualização merece análise, mas não identifica automaticamente um único culpado.

Avaliar uma alternativa

O programador pode testar uma subconsulta, uma expressão equivalente, um índice ou uma reformulação do uso de WP_Query. Verifique se mantém os mesmos artigos, a ordem, as exclusões, os duplicados e a paginação, especialmente com combinações de taxonomias.

Não substitua todos os JOIN nem elimine GROUP BY de forma global. Uma alteração que acelere uma categoria pode devolver resultados incorretos noutra consulta.

Aplicar e manter

Evite editar diretamente os ficheiros do núcleo: as atualizações substituem as alterações e uma correção antiga pode deixar de encaixar. Se uma adaptação temporária for imprescindível, deve ser mantida pelo programador com controlo de versões, testes e uma forma de a retirar.

Após a alteração, compare várias execuções e verifique as categorias, as pesquisas, a paginação e a administração. Guarde o plano anterior e reverta se outras operações piorarem. Para consultas que também calculam totais, consulte o guia de SQL_CALC_FOUND_ROWS.

Também lhe pode ser útil

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