Performance no MySQL

Started by insanity, 25 de September , 2006, 05:46:23 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

insanity

Fonte: dicas-l

by Luiz Paulo de Oliveira Santos

Todos leitores que um dia precisaram hospedar uma aplicação em um provedor de hospedagem têm a mesma dúvida: Será que o provedor possui performance no acesso a banco de dados?

Atualmente todos os provedores disponibilizam MySQL como banco de dados padrão.

O MySQL é um SQL leve, muito veloz e indicado para aplicações onde se deseja armazenar e extrair informações rapidamente. Porém peca por não ter alguns recursos para aplicações mais elaboradas, como triggers por exemplo, que somente está disponível à partir da versão 5 do MySQL.

Porém as vezes, o provedor hospeda a página em um equipamento e o banco em outro, e com isso podemos ter gargalos de performance, ou mesmo situações mais complexas como ter "dezenas" de domínios armazenados em um mesmo servidor, e todos rodando sistemas de portais como Xoops, Bitweaver, Joomla ou outros. Logo, com muita concorrência no servidor a performance pode sofrer alterações, e geralmente para pior.

Logo, testar performance em um servidor de banco de dados é fundamental. E podemos fazer alguns pequenos testes que poderão nos indicar se dia-a-dia a performance de nosso servidor está se mantendo ou se degradando.

O MySQL implementa uma função chamada BENCHMARK(). Essa função é bem interessante, pois executa uma operação vezes, e devolve o tempo que levou para executar essa operação.

Por exemplo:

  mysql> SELECT BENCHMARK(1000000,1+1);
  +------------------------+
  | BENCHMARK(1000000,1+1) |
  +------------------------+
  |                      0 |
  +------------------------+
  1 row in set (0.32 sec)

O exemplo acima demonstra que o MySQL pode executar 1000000 expressões de soma (1+1) + em 0.32 segundos em um PentiumII 400MHz. Quanto menor for o valor, mais rápido será a performance do banco.

Por exemplo, podemos testar o resultado de um SELECT, porém esse SELECT dele retornar uma única linha e tratar uma única coluna:

  SELECT benchmark( 1000000, (SELECT count( artigo ) FROM dbfreemag ));
Dessa forma podemos testar o desempenho do banco no servidor.

Mas seria interessante avisar o administrador antes de rodar algum tipo de benchmark, pois CPU do servidor é altamente exigida nesse momento. Principalmente se for rodar queries de teste mais pesadas.

Se for rodar alguma Query pesada, CERTIFIQUE-SE QUE NÃO ESTÁ FAZENDO EM UM SERVIDOR DE PRODUÇÃO. Queries pesadas devem ser rodadas apenas em servidores de teste, porque podem comprometer gravemente a performance do servidor, como por exemplo:

  SELECT BENCHMARK(1000000, (SELECT BENCHMARK(1000000, 1+1)))Espero que a dica seja útil, mas utilizem a função com cautela.

Forte abraço e até mais.

d3rf

Boa valew pela dica, vou publicar no meu blog com as devidas fontes ... Isso vai me ser muito útil ...