Como encontrar queries lentas no MySQL e MariaDB
Do slow query log ao EXPLAIN: o caminho para descobrir quais consultas pesam mais no MySQL e no MariaDB, e por quê.

Otimizar a query errada é o esporte favorito de quem está com pressa. A consulta de 30 segundos que roda uma vez por dia assusta, mas quem derruba o servidor costuma ser a de 50 milissegundos que roda 2 mil vezes por segundo. No MySQL e no MariaDB, as ferramentas para descobrir isso já vêm na caixa.
Resumo rápido: Do slow query log ao EXPLAIN: o caminho para descobrir quais consultas pesam mais no MySQL e no MariaDB, e por quê.
Série MySQL e MariaDB na prática: comandos válidos para MySQL 8.x e MariaDB 10.6+/11.x, com as diferenças indicadas quando existem.
O fluxo
slow query log ──▶ pt-query-digest ──▶ top 10 por tempo TOTAL
│
performance_schema / sys ──────────────────┘
▼
EXPLAIN / EXPLAIN ANALYZE
▼
índice, reescrita ou cache
1. Ligue o slow query log
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 0.5; -- segundos
SET GLOBAL log_queries_not_using_indexes = ON; -- cuidado: pode gerar muito log
SHOW VARIABLES LIKE 'slow_query_log_file';
No MariaDB, log_slow_verbosity = query_plan,explain grava o plano junto com a consulta. Muito útil.
2. Agrupe com pt-query-digest
pt-query-digest /var/lib/mysql/servidor-slow.log > relatorio.txt
Ele normaliza as consultas (troca valores por ?) e ordena por tempo total. Olhe as primeiras: elas costumam somar a maior parte da carga.
3. Sem acesso ao log? Use o sys schema
SELECT query, exec_count, total_latency, avg_latency, rows_examined_avg
FROM sys.statement_analysis
ORDER BY total_latency DESC LIMIT 10;
-- Consultas com full table scan
SELECT query, exec_count FROM sys.statements_with_full_table_scans LIMIT 10;
-- O que está rodando agora
SELECT id, time, state, LEFT(info,120) FROM information_schema.processlist
WHERE command <> 'Sleep' ORDER BY time DESC;
4. Entenda o plano
EXPLAIN SELECT p.id, c.nome FROM pedidos p JOIN clientes c ON c.id = p.cliente_id
WHERE p.status = 'aberto' ORDER BY p.criado_em DESC LIMIT 20;
EXPLAIN ANALYZE SELECT ...; -- MySQL 8.0.18+: executa e mostra tempos reais
ANALYZE FORMAT=JSON SELECT ...; -- equivalente no MariaDB
O que procurar:
type: ALL→ leitura da tabela inteira.rowsmuito maior que o resultado → filtro sem índice.Using filesorteUsing temporaryem tabelas grandes.key: NULL→ nenhum índice usado.
5. Corrija e meça de novo
Crie o índice certo (veja quando criar e quando remover índices), reescreva a consulta ou elimine chamadas repetidas na aplicação. Depois, compare o tempo total no mesmo período. Sem medir antes e depois, é palpite.
A série completa: MySQL e MariaDB na prática
- MySQL e MariaDB lentos? 12 causas comuns (e como resolver)
- Como fazer um health check completo no MySQL e MariaDB
- MySQL e MariaDB travando? Entenda locks e deadlocks
- Como otimizar o InnoDB buffer pool no MySQL e MariaDB
- Como encontrar queries lentas no MySQL e MariaDB
- Índices no MySQL e MariaDB: quando criar e quando remover
- Consultoria MySQL e MariaDB: quando vale a pena contratar um DBA especializado?
- DBA remoto para MySQL e MariaDB: como funciona?
- Assessment MySQL e MariaDB: o que é avaliado?
- Backup e disaster recovery no MySQL e MariaDB
Precisa de ajuda especializada?
Se o seu ambiente MySQL ou MariaDB precisa de diagnóstico, otimização, backup confiável ou acompanhamento contínuo, conheça a HTI Tecnologia, especialista em bancos de dados.
Ainda decidindo entre os dois? Leia MySQL ou MariaDB: qual é o melhor? e o guia definitivo de MySQL.
Quer dominar a base que os dois compartilham?
MariaDB nasceu do MySQL, e tudo o que é fundamento (modelagem, índices, transações, replicação, otimização) vale para os dois. É isso que eu ensino no livro Aprendendo MySQL: Prática, Teoria, Laboratórios, Desafios e Projetos: 292 páginas, 10 laboratórios guiados, 277 exercícios e 4 desafios com gabarito, e uma máquina virtual pronta para você quebrar (e consertar) à vontade.
Conheça o livro e leia a degustação gratuita.
Bora trocar ideia?
Se este artigo te ajudou (ou te fez discordar, que também vale), me siga no LinkedIn e no Instagram. Lá eu posto bastidores de banco de dados, história da computação e histórias de produção que ninguém conta em curso oficial.
Sobre o autor: Alexandre Almeida atua com bancos de dados há mais de 25 anos, foi instrutor oficial de MySQL e Oracle para mais de 1.000 alunos e escreveu Aprendendo MySQL: Prática, Teoria e Laboratórios.
Fontes: MySQL 8.4 Reference Manual (Oracle), MariaDB Server Documentation (MariaDB Knowledge Base), documentação do Percona Toolkit e do Percona XtraBackup. Imagem de capa: ilustração gerada por IA (pessoa examinando registros impressos com uma lupa ao lado de um monitor com gráficos).