Desempenho e monitorização
Consultas SQL lentas do tipo "SELECT SQL_CALC_FOUND_ROWS"
Ao investigar a lentidão do WordPress, pode encontrar consultas com esta estrutura:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) ...
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 ...
Os fragmentos anteriores são ilustrativos, não consultas completas para executar. SQL_CALC_FOUND_ROWS permite calcular o total que corresponde aos filtros, mesmo que a consulta devolva apenas uma página de resultados. Pode aparecer com tabelas diferentes, não exclusivamente posts e postmeta.
À medida que as tabelas crescem, uma consulta que examina demasiadas linhas pode demorar mais e tornar-se um estrangulamento. O efeito depende dos dados e do plano de execução.
A presença de SQL_CALC_FOUND_ROWS não identifica por si só a causa. O custo pode depender dos filtros, de um JOIN sobre metadados, do volume de resultados, da ordenação aplicada ou dos índices que já existam. Localize primeiro o plugin, o tema ou o pedido que gera a consulta com o PHP X-Ray.
Antes de criar um índice, guarde uma cópia recuperável e execute EXPLAIN sobre a consulta completa. Verifique também os índices atuais da tabela:
SHOW INDEX FROM wp_postmeta;
Um índice combinado como (post_id, meta_key) pode ajudar determinados planos de execução, mas não é uma solução universal e acrescenta custo a cada escrita. Se a análise confirmar que falta, utilize uma ferramenta mantida como o Index WP MySQL For Speed ou peça ao programador que desenhe e teste o índice num clone.
Depois da alteração, repita o EXPLAIN, compare o tempo em várias execuções e verifique inserções, pesquisas, administração e tarefas agendadas. Reverta o índice se não melhorar o plano ou se penalizar outras operações.
Se o código não precisar de paginação
Numa consulta própria construída com WP_Query, o programador pode avaliar no_found_rows => true quando não se utiliza o total nem o número de páginas. Não o aplique globalmente: avariaria funções que dependem desses valores. A referência de WP_Query descreve o parâmetro.
Reveja também os filtros, a ordenação e o número de resultados pedidos. Não edite o núcleo do WordPress nem elimine a cláusula de uma consulta gerada só porque aparece no relatório. A validação deve verificar os resultados e a paginação, além do tempo.
Também lhe pode ser útil
- 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...
- 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...
Algo não bate certo ou mudou? Diga-nos e revemos.