Sinais de que o banco é o gargalo
- Telas com filtros e buscas ficam lentas, telas simples não
- Lentidão aumenta com o tempo, sem mudança no código
- Uso alto de CPU ou disco no servidor do banco
- Consultas aparecem no registro de consultas lentas
Causas comuns
| Causa | Explicação simples |
|---|---|
| Falta de índice | O banco lê a tabela inteira para achar poucos registros, como ler um livro sem índice |
| Consultas em laço | Uma consulta por item em vez de uma consulta para todos |
| Buscar colunas e linhas demais | Trazer tudo para usar pouco |
| Buscas com curinga no início | Pesquisas do tipo “contém” em textos grandes, sem estrutura adequada |
| Tabelas enormes sem arquivamento | Dados antigos que poderiam estar separados |
| Travas | Operações longas segurando tabelas que outras precisam |
Como identificar o que otimizar
Ative o registro de consultas lentas do banco e use ferramentas de monitoramento da aplicação. Para cada consulta lenta, o comando de explicação do banco (EXPLAIN, no MySQL e no PostgreSQL) mostra como ela é executada e se usa índices. Comece pelas consultas que somam mais tempo no dia: uma consulta de 200 ms executada milhares de vezes pesa mais que uma de 5 segundos executada uma vez.
Cuidados
Índices aceleram leituras, mas ocupam espaço e deixam gravações um pouco mais lentas. Crie os que as consultas reais precisam, não índices em todas as colunas. Em tabelas grandes, criar índices pode travar a tabela: planeje fora do horário de uso.
Veja também relatórios lentos e dashboard lento. Otimizamos bancos de dados de sistemas existentes no nosso serviço de manutenção de sistemas PHP e Laravel.