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.
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
26 Set 2006, 00:36
Me escreva por e-mail para agilizarmos a solução. Uma vez resolvido coloco a solução final aqui no Forun.
25 Set 2006, 16:40
Obrigado pela atenção
Renato
25 Set 2006, 16:12
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
25 Set 2006, 15:43
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
25 Set 2006, 14:51
Grato pela sua boa vontade de passar algo que sabe para quem quer aprender.
valeu.
Artigos Publicados
- Entendendo os conceitos sobre mapeamento objeto/relacional
15/03/2010 - Como calcular o tamanho de um banco de dados através do número de registros?
30/11/2009 - Como que eu configuro o MySQL para que os meus usuários tenham acesso?
26/11/2009 - Mysql replicator
24/11/2009 - Importar dados para MySQL
18/11/2009 - Importar estrutura de um arquivo SQL
17/11/2009 - MySQL - Gravando Imagens em uma tabela
02/10/2009 - Retorno status de comandos no MySQL
01/10/2009 - Recuperação da senha de root em MySQL
30/09/2009 - Performance e Timeout
29/09/2009 - Script de Backup para Banco de Dados Firebird
04/01/2009 - Sumarizações com **GROUP BY** e **WITH ROLLUP**
21/07/2008 - GREEN SQL
17/06/2008 - SELECT com ordem aleatória
12/06/2008 - MySQL é da SUN!
28/05/2008 - Otimizando consultas no PostgreSQL - Comando EXPLAIN
27/04/2008 - Back up de base de dados SQL
05/03/2007 - Linguagem dentro da linguagem - parte 3 - DDL
09/02/2007 - Linguagem dentro da linguagem - parte 2 - DML
06/02/2007 - Linguagem dentro da Linguagem - parte 1
22/01/2007 - REVOKE: Controle de direitos no SQL - parte 2
18/01/2007 - Cursor
12/01/2007 - Restauração MySQL
Por Cristina Otsuka
05/12/2006 - GRANT: Controle de direitos no SQL - parte 1
29/11/2006 - Backup no MySQL
Por Cristina Otsuka
27/11/2006 - Preenchimento automático de campos
23/11/2006 - Projeto Firebird lança Firebird 2.0
14/11/2006 - Limpando tabelas
28/10/2006 - VIEW
27/10/2006 - Overview PostgreSQL
17/10/2006 - Acessando Firebird SQL com Open Source
11/10/2006 - Novidades do Firebird no mundo
02/10/2006 - NULL ou não NULL, eis a questão!
26/09/2006 - Performance no MySQL
25/09/2006 - INSERT com SELECT
17/09/2006









