MySQL de Alta Performance: Otimizando o seu SGBD.

postado em: Tutoriais | Comments

Quem nunca utilizou ou desenvolveu um sistema ou website e percebeu que os acessos, consultas e registros estavam lentos? Quando este problema é detectado a primeira coisa que fazemos é ver se a nossa conexão com a internet está lenta ou se o banco ou o código estão otimizados. E o SGBD? Já pararam para pensar que em muitos casos de lentidão o culpado é o servidor onde o seu banco de dados está? Pode ser por configuração errada, rede com problemas ou não foi projetada de uma forma inteligente ou até mesmo o SO do servidor!

Hoje eu vou passar algumas dicas e experiências que adquiri como DBA e com isso ajudá-los a ter um MySQL Server rápido e que não seja o “gargalo” ou o vilão da história.

 

Sistema Operacional

Antes de começarmos, vale lembrar que o ideal é sempre estar com a versão estável mais atual do MySQL Server e do seu SO. Não esqueça, os updates ajudam na segurança e também na performance do seu servidor.

Para que o seu SGBD seja rápido e confiável você precisa ter um SO saudável e confiável. Aqui vão algumas dicas de como ter um servidor com um SO confiável:

  1. Utilize sistemas Linux para o MySQL;
  2. Tenha certeza de que o seu servidor tem capacidade de processamento necessária para atender as requisições no seu banco;
  3. Nunca deixe faltar memória no seu servidor, quanto mais memória, mais cache poderá ser feito;
  4. De preferências para empresas que utilizem discos SSD para que não tenha lentidão na leitura ou gravação dos dados;
  5. Desabilite os logs que não serão utilizados no servidor para diminuir o IO do SO;
  6. Sempre tente instalar o MySQL em um disco separado. Para facilitar a vida você pode criar um link simbólico no /var/lib: [[email protected] ~]# ln -s /SUAINSTALACAO /var/lib/mysql

 

MySQL

Você como DBA deve manter uma comunicação frequente com a equipe de desenvolvimento. O motivo? Saber qual a Engine que a equipe está utilizando para as tabelas do projeto. MyISAM ou InnoDB? E agora? Qual a diferença?

A principal diferença entre estas engines é que o MyISAM oferece travamento por tabela, ou seja, se eu estiver usando MyISAM e for gravar algo em uma tabela, a tabela toda está com um lock e caso haja outras escritas a serem feitas ao mesmo tempo nesta tabela, terão que esperar a primeira escrita concluir.
O InnoDB oferece travamento por linha, ou seja, uma query de escrita não vai travar a tabela toda mas apenas a linha, o restante da tabela estará disponível para ser utilizada.

Mas nem tudo é perfeito. O InnoDB precisa de mais recursos do servidor e certamente aumentará a carga de trabalho comparado ao MyISAM que consumirá pouco recursos. Só que não podemos esquecer que InnoDB possui muito mais parâmetros de otimização do que o MyISAM.

Então, qual engine usar? Normalmente se está utilizando um sistema pronto, na próprio documentação já informa qual engine deve ser utilizada. Caso contrário, o ideal é fazer um teste performance.

Para você ver qual a engina que as tabelas estão usando, basta executar a query:
mysql> SHOW TABLE STATUS;

Vamos agora efetuar algumas configurações de performance para o seu MySQL. Existem diversos parâmetros que você utilizar para aumentar a performance e podem ser vistos no site do MySQL e entender melhor o que cada parâmetro pode fazer.

Abaixo eu vou colocar uma configuração básica mas que pode melhorar bastante a performance do seu SGBD.

parameters

 

Rede

Com um sistema operacional e SGBD bem configurados já conseguimos alcançar um nível de performance bem alto, mas ainda existe um ponto importante a ser visto, a rede.

Não adianta você fazer todas estas configurações e ter todos estes cuidados e a comunicação entre o seu SGBD e sistema ser lenta, com latência alta ou quedas frequentes. Aqui vão algumas dicas que podem lhe ajudar nesta questão.

  1. Se você faz a conexão com o banco utilizando nomes e não IP, utilize um servidor DNS de confiança, de preferência que esteja na sua rede local ou na mesma rede do banco e sistema;
  2. O seu MySQL e sistema ou website devem estar na mesma rede para evitar latência alta;
  3. Cuide da estrutura. Utilize roteadores e switches de qualidade;
  4. Monitore a sua rede para detectar o mais breve possível qualquer indisponibilidade ou lentidão.

Allan Moraes

Allan Moraes é gaúcho e entusiasta open source. Trabalha em uma Startup com foco em Plataforma como Serviço (PaaS), é especialista em MySQL, High Availability e High Scalability Architecture.