Consultas lentas: como as encontrar e as correcções que mais resultam

Um site lento por causa da base de dados quase sempre tem uma ou duas consultas a fazer o trabalho todo, e a correcção mais frequente é um índice em falta. O caminho é este: descobrir qual é a consulta, pedir ao MariaDB que explique como a executa (EXPLAIN), e só depois corrigir. Mexer às cegas, ou mudar de plano, raramente resolve.

Encontrar a consulta culpada

1 No WordPress, instale o plugin Query Monitor: mostra as consultas de cada página, as mais lentas primeiro, e o plugin ou tema que as pediu.
2 Noutra aplicação, veja as consultas em curso no phpMyAdmin, em Estado, depois Processos, enquanto a página está lenta. Uma consulta que aparece repetidamente é a suspeita.
3 Num VPS seu, pode ligar o registo de consultas lentas no motor (slow_query_log e long_query_time). Na hospedagem partilhada essas definições são do servidor, não suas.

Pedir ao MariaDB que explique

No separador SQL do phpMyAdmin, escreva EXPLAIN antes da consulta suspeita e execute. A coluna type com o valor ALL significa que o motor leu a tabela toda, linha a linha. Um valor como ref ou const significa que usou um índice. A coluna rows mostra quantas linhas estima ler.

Correcção Quando resulta
Criar um índice na coluna do WHERE ou do JOIN O EXPLAIN mostra ALL numa tabela grande. É a mais comum.
Pedir só as colunas de que precisa, e pôr LIMIT A aplicação faz SELECT * e mostra dez linhas de um milhão.
Reduzir a base Tabelas cheias de registos antigos, revisões, sessões e dados temporários. Veja onde ver o tamanho e o que pode sair.
Limpar as opções carregadas em todas as páginas No WordPress, a tabela wp_options com muitos dados marcados como autoload.
Cache de página A mesma consulta corre a cada visita. Veja instalar e afinar uma cache de páginas.
Mais índices nem sempre é melhor. Cada índice acelera a leitura e atrasa a escrita, e ocupa espaço. Crie um de cada vez, na coluna que o EXPLAIN mostrou, e meça. E faça uma cópia antes: veja exportar com o phpMyAdmin.

Um exemplo, do princípio ao fim

Uma loja demora a listar encomendas por estado. Escreve EXPLAIN SELECT * FROM encomendas WHERE estado = 'pago'; e a coluna type diz ALL, com muitas linhas estimadas. Cria CREATE INDEX idx_estado ON encomendas (estado); e repete o EXPLAIN: agora o type é ref e as linhas estimadas descem muito. A página que levava tempo a abrir passa a responder logo. Foi um único índice, escolhido porque o EXPLAIN o pediu. É esta a ideia: medir, mexer numa coisa, medir de novo.

O travão pode não ser a consulta. Se a conta usa muita CPU na base, o servidor pode abrandá-la, o que parece uma consulta lenta mas é consumo a mais. Veja o que come CPU num site e limpar e optimizar a base no phpMyAdmin.

Encontrou a consulta mas não sabe o que fazer a seguir? Mande-nos o resultado do EXPLAIN e a aplicação e vemos consigo.

Abrir um pedido de suporte

VEJA TAMBÉM

Limpar e optimizar a base de dados no phpMyAdmin

O que come CPU num site, e como baixá-la

O site está lento: o que medir antes de mudar de plano

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?