No post de hoje vamos dar algumas dicas para corrigir o alto uso de CPU do MySQL.
Precisando otimizar seu banco de dados? Fale conosco https://soloweb.com.br
1 – Identificando o problema.
Se você vem notando seu sistema/site mais lento que o normal, já pode ser uma dica que pode ser o uso do MySQL porém vamos ter certeza utilizando um comando de monitoramento de recursos que é o htop:
$ htop
Caso você não possua instalado em seu servidor basta executar a instalação a partir do gerenciador de repositório do seu S.O instalado, ex:
#para CentOS 7, Rock Linux, Almalinux(sistemas baseados em Redhat)
$ yum install htop -y
#para ubuntu, debian, linux mint(sistemas baseados em debian)
$ apt install htop -y
Após a instalação basta executar como informado acima e você verá uma tela como descrita abaixo:
Como podemos verificar estamos quase com mais 200% de uso das CPU’s, vamos agora para possíveis soluções.
2 – Corrigindo o alto uso da CPU.
Se a carga do servidor estiver realmente relacionada ao alto uso da CPU, descobrimos que as seguintes correções são úteis:
- Habilite o InnoDB para lidar com inúmeras conexões simultâneas – Verifique “PROCESSLIST” do MySQL e se você vir muitas consultas no status “LOCK”, isso significa que muitas consultas são colocadas em espera porque as tabelas MyISAM estão lidando com outras transações. Para corrigir isso, converta essas tabelas no mecanismo InnoDB que suporta bloqueio em nível de linha.
- Habilite conexões persistentes – Se você tiver apenas um único aplicativo que recebe milhares de conexões por hora, habilitar conexões MySQL persistentes pode melhorar o desempenho. Se o servidor tiver vários aplicativos (como um servidor de hospedagem compartilhada), isso pode não funcionar.
- Bloquear processos abusivos – Quando um site está sob ataque (como DDoS, spam de comentários, etc.), ele resulta em um número anormalmente alto de conexões estabelecidas em um curto espaço de tempo. Use o “PROCESSLIST” no MySQL para identificar os principais usuários e bloquear o acesso às conexões abusivas.
- Otimize consultas de banco de dados – Alguns aplicativos da web usam consultas complexas para exibir informações do site. Essas consultas podem levar muito tempo para serem executadas e causar carga na CPU. Obtenha a lista dessas consultas no “log de consultas lentas” e reduza o número de junções e outras manipulações de tabela em uma única consulta.
- Verifique se há “bug de segundo bissexto” – Em 1º de julho de 2015, houve uma adição de um segundo bissexto ao horário UTC padrão. Em servidores que executam versões antigas do kernel Linux e que usam servidores de horário, isso causa alta carga no MySQL. Se você tiver um kernel Linux antigo, tente redefinir a hora usando o comando date -s “$(date)” .
3 – Como evitar
As alterações no tráfego do servidor e nos bancos de dados crescem com o tempo. Problemas de alta CPU do MySQL podem ser evitados na maioria se o servidor de banco de dados for auditado e ajustado para desempenho.
- Ajuste de desempenho do MySQL – O MySQL usa vários buffers e sistemas de cache para executar consultas. À medida que o volume e a complexidade das consultas ao banco de dados mudam, as configurações do servidor precisam ser ajustadas para obter o desempenho ideal. Existem várias ferramentas, como o mysqltuner, para identificar quaisquer configurações que precisem de ajuste.
- Auditoria e reforço de segurança – Os ataques de spam e DDoS podem facilmente sobrecarregar um servidor de banco de dados. Implemente firewalls de aplicativos da web, como ModSecurity, e firewalls DDoS, como ModEvasive, para evitar que invasores afetem o tempo de atividade do servidor.
- Implementação de balanceamento de carga – À medida que o tráfego do servidor cresce, pode ser necessário dividir a carga em vários servidores. O MySQL pode ser configurado para replicação mestre-mestre e mestre-escravo, o que permite que consultas sejam atendidas a partir de qualquer servidor em um cluster.
- Otimizando consultas ao banco de dados – Se os aplicativos da web forem mal codificados, nenhuma otimização do banco de dados corrigirá a carga do servidor. Monitore o “log de consultas lentas” do MySQL e reduza o número de JOIN’s para tornar o banco de dados mais rápido.
- Usando alternativas de alto desempenho como Percona – MySQL tem muitos gargalos de memória/CPU devido à forma como processa as consultas. Spin-offs do MySQL, como MariaDB e Percona, resolvem esses problemas e ajudam a obter melhor estabilidade.
Com essas dicas você melhora o desempenho tanto do seu servidor quanto do site.