Desempenho e monitorização
Diagnosticar consultas LEFT JOIN lentas no WordPress
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
- Reproduza um URL lento e registe se havia sessão, cache e filtros.
- Utilize o PHP X-Ray para localizar a consulta completa e o componente que a gera.
- Anote as versões do WordPress, do MySQL ou MariaDB e dos plugins envolvidos.
- Numa cópia com dados representativos, reveja o plano com
EXPLAINe 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
- 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...
- Otimizar a tabela wp_options e os dados do tipo "autoload" Meça e reduza os dados autoload de wp_options, localize opções grandes, cron, transientes e sessões,...
- Acelerar e otimizar o WordPress e o WooCommerce passo a passo Otimize o WordPress e o WooCommerce passo a passo revendo PHP, cron, LiteSpeed Cache, imagens, base...
- 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.