Acesso direto ao conteúdo

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

 

Performance no MySQL

Por Luiz Paulo de Oliveira Santos

Data de Publicação: 25 de Setembro de 2006

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 <n> 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.

Veja a relação completa dos artigos da Bancos de Dados Livres

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir
  • Currently 0.00/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 0.0 /5 ( votos)


Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS

Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.

Opinião dos Leitores

Luiz Paulo de Oliveira Santos
26 Set 2006, 00:36
Ola Renato,

Me escreva por e-mail para agilizarmos a solução. Uma vez resolvido coloco a solução final aqui no Forun.
Renato
25 Set 2006, 16:40
Olá Luiz Paulo .. eu já ahavia testado assim SELECT BENCHMARK(1000000, (SELECT count(produtos.id) FROM produtos)); mas continua sem funcionar...Se você puder me ajudar agradeço...



Obrigado pela atenção

Renato
Luiz Paulo de Oliveira Santos
25 Set 2006, 16:12
Renato, tudo bem?

Experimente colocar o segundo SELECT dentro de parênteses, conforme o exemplo a seguir:

SELECT BENCHMARK(1000000, (SELECT count(produtos.id) FROM produtos));

Se continuar com problemas, me avise.

[]s

Luiz
Renato
25 Set 2006, 15:43
Eu teste a dica nisso aqui e não funcionou:
SELECT BENCHMARK(1000000, SELECT count(produtos.id) FROM produtos);

Alguém pode me dá uma dica ai o q fiz de errado??

Valeu pelo artigo..

Renato
João Leal
25 Set 2006, 14:51
Muita boa a dica, trabalho com o mysql, portanto cada dia aprendo algo a mais.
Grato pela sua boa vontade de passar algo que sabe para quem quer aprender.
valeu.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

 

 

Procure pela casa ou apartamento ideal à venda ou para aluguel na busca inteligente do Imohoo
Buscar imóveis