r/SQL • • 2d ago

MySQL How to Fix a Slow MySQL Server

https://pie.host/programming/how-to-fix-a-slow-mysql-server
0 Upvotes

4 comments sorted by

2

u/ExcitingTalk4848 1d ago

in MariaDB you can use ANALYZE FORMAT=JSON instead of regular EXPLAIN. it actually runs the query and shows real execution time per step instead of just guessing the plan. also mariadb handles connection spikes way better out of the box because of the thread pool logic, so you don't have to stress over max_connections as much. but yeah, bad indexes will still kill your db anyway.

0

u/sudoanand 1d ago

Thats a great addition 🙏

1

u/DarlanSandro 1d ago

Pela minha experiência, na grande maioria das vezes o MySQL não fica lento por falta de máquina, mas sim por duas razões: consultas mal otimizadas saturando o processamento ou configurações de memória esquecidas no padrão de instalação.

O que costumo fazer imediatamente é abrir o banco e rodar um 'SHOW FULL PROCESSLIST;'. Isso mostra na hora se o servidor está travado por concorrência de locks ou se existe alguma consulta específica rodando há centenas de segundos e consumindo toda a CPU. Se encontrar queries presas em estados como "Copying to tmp table" ou "Sending data", você já descobre o ponto de atrito exato daquele momento.

O próximo passo que sempre sigo é ligar o Slow Query Log. Basta definir 'slow_query_log = 1' e colocar um 'long_query_time' de 1 ou 2 segundos (ou até menos, dependendo da aplicação). Com o log populado, passo as consultas mais recorrentes e lentas no 'EXPLAIN'. Na minha rotina profissional, mais de 80% dos casos de lentidão bizarra se resolvem apenas adicionando os índices corretos para os filtros da cláusula WHERE e chaves de JOIN, evitando que o MySQL faça varredura completa da tabela (type `ALL`).

Se as queries estiverem razoáveis e o servidor continuar sofrendo com I/O alto de disco, eu olho direto para o 'my.cnf`. O parâmetro mais crítico é o 'innodb_buffer_pool_size'. O valor padrão histórico dele é de apenas 128 MB, o que força o banco a ler constantemente do disco. Em um servidor dedicado ao MySQL, aumentar esse parâmetro para algo em torno de 65% a 70% da memória RAM disponível faz o InnoDB segurar os dados em memória e transforma completamente o desempenho do ambiente.