RSS

Otimizando Querys do Mysql

sáb, jun 12, 2010

artigos

Um dos grandes vilões da performance de sites, está longe de ser as requisições externas e DNS LookUP – DNS LookUP é o processo de conversão de um “nome” para um IP, como por exemplo quando você digita www.hostne.ws, este “nome” é convertido para um IP que aponta para um servidor, mas esta explicação fica para um outro artigo – e sim o Banco de dados. O Banco e dados, este sim, é o grande vilão de performance WEB.
Neste caso, tratarei o Mysql, banco largamente utilizado por aplicações WEB, porém, otimizações de banco de dados podem ser utilizadas para outros bancos, bem como SqlServer, FireBird, Oracle e outros.
Não citando o caso das diversas classes que podem ser utilizadas para trabalhar com Banco de Dados, como o AdoDB5 que pode criar Cache das querys, vamos trabalhar direto no coração das otimizações.
Para verificar quais querys estão rodando em sua aplicação, podemos usar o simples comando “show processlist;” do Mysql, ao qual mostrará todas as Querys que estão em execução. Para completar, podemos usar o “show full processlist;” para a visualizar a Query completa que está em execução.
Em mãos das Querys que estão em execução, vamos procurar por otimizações que podem ser feitas.
Vamos aos exemplos de otimização de Query para o Mysql:
Usarei neste primeiro momento um simples exemplo de uma Query que roda SEMPRE nas aplicações do WordPress.
SELECT option_name, option_value FROM wp_options WHERE autoload = ‘yes’
Uma Query muito conhecida para quem trabalha com o WordPress o maior gerenciados de Blog OpenSource existente – Esta Query verifica quais plugins e opções estão ativas.
Apenas como uma dica adicional aos que usam o WP Super Cache, esta Query roda SEMPRE independente do plugin de Cache instalado, pois verifica se o Plugin de Cache, por exemplo, está instalado.
Para os exemplos, você pode utilizar o PhpMyAdmin ou o próprio terminal do SSH ou até então o MysqlFront, depende da sua utilização e programa preferido, não irei me ater a estes detalhes técnicos de utilização.
Ao ver esta Quey em execução – utilizando o “show processlist;” – você pode executar o seguinte comando para tentar otimiza-la e entende-la.
explain SELECT option_name, option_value FROM wp_options WHERE autoload = ‘yes’;
Você verá o ítem “possible_keys” – Este item mostra os Índices que o Mysql usará para otimizar a indexação da Query.
Neste exemplo, padrão do WordPress, verá que esta Query não possui um Índice.
Definição do Mysql para índices – Os índices são utilizados para encontrar registros com um valor específico de uma coluna rapidamente. Sem um índice o MySQL tem de iniciar com o primeiro registro e depois ler através de toda a tabela até que ele encontre os registros relevantes -.
Resumindo, mesmo procurando por “autoload” = “yes” o Mysql tem que ler também os registros com “autoload” = “no”, para retornar a sua resposta.
Verá também o item – “rows” – está é a quantidade de linhas que o Mysql teve que ler para achar uma resposta para a Query. No meu caso de exemplo – 167
Como criar um índice no Mysql?
ALTER TABLE `wp_options` ADD INDEX ( `autoload` )
Este comando é do Mysql, então você pode utilizar em qualquer programa de interface para Mysql.
Você verá que após criar este índice e rodando a query:
explain SELECT option_name, option_value FROM wp_options WHERE autoload = ‘yes’;
Terá o “possible_keys” – autoload e “rows” 129, no meu exemplo, com apenas uma otimização, diminuimos o trabalho do Mysql.
Inicialmente você pode pensar que esta otimização é minima, porém se você otimizar isso em um site com 10 Mil visitas diárias, sentirá a diferença consideravelmente com apenas uma linha de otimização.
Utilizei esta Query como exemplo pois está ligada diretamente no dia a dia de todos os blogueiros de plantão que acham que estão facilitando a vida do Mysql utilizando o WP Super Cache.
Você pode trabalhar com diversas otimizações, apenas criando índices em suas tabelas do Mysql.
Bem, este é um exemplo simples e funcional, você pode utiliza-lo em TODOS seus blogs com WordPress instalado e buscar por otimizações em sites com código diferente.
Otávio Nogueira trabalha na iPORTO.COM atuantes nas áreas de Configuração e Instalação de Servidores, Desenvolvimento WEB: PHP + Mysql | ASP + SqlServer | JavaSctip | CSS – desde 2003

, , , , , , ,

Escrito por:

- escreveu 1 posts no Hostnews.


Contato com o Autor

2 Comentários para este post

  1. silas_i Says:

    Otávio,

    Parabéns pelo post, gostei demais de suas dicas. Eu também concordo que o mysql é um grande vilão para a performance de servidores linux. Eu incluo na minha lista o Mailscanner Assassin como um dos vilões também.

    Seja bem vindo ao Hostnews!

    Silas

  2. lf Says:

    adorei a explicação, porem tenho duvidas sobre a otmização de views poderia utilizar Como exemplo uma radio virtual para este post

Deixe uma resposta

Get Adobe Flash playerPlugin by wpburn.com wordpress themes