IvoGomes.com

Voltar ao início

Boas notícias sobre ‘performance’

Aqui há uns dias tive uns problemas graves com o meu serviço de alojamento (DreamHost). Felizmente está tudo resolvido e o problema estava relacionado com um script que estava a tentar optimizar uma tabela na base de dados com cerca de 300MB. Entrou em loop e nunca mais parou, mandando o servidor abaixo e consumindo toda a RAM existente (e a não existente também). Como consequência disso, o Portal das Curiosidades (o site que contém a tal tabela) ficou em baixo durante 2 dias e os quase 21.000 utilizadores ficaram privados do seu espaço preferido na Internet ;)

Cheguei mesmo a pensar que tinha sido o fim do Portal das Curiosidades, isto no dia exacto em que fazia 9 anos de vida (9/9/99 - 9/9/08). 

Depois do problema resolvido, dos 3 sites que tenho no servidor (VPS), apenas um, o MyTVShows, continuava extremamente lento a carregar as páginas e a gastar alguma RAM a mais comparado com os outros dois sites muito mais pesados e com muito mais visitantes (este blog e o Portal das Curiosidades).

Depois de andar a olhar para o código e de andar a tentar optimizar as ligações à base de dados, dei de caras com um artigo sobre o uso de INDEXES nas tabelas da base de dados MySQL. Segundo esse artigo, numa tabela com 1000 registos, o uso de um INDEX melhoraria o desempenho da mesma em cerca de 100 vezes. Desconfiei e fui ler o artigo sobre INDEXES no manual de MySQL e decidi tentar.

Cinco minutos depois, o My TV Shows estava a debitar páginas com uma velocidade como se não houvesse amanhã :D

Passou de cerca de 4 ou 5 segundos para 0,07 segundos o tempo que demora a carregar a página inicial. Todas as outras operações ficaram também notavelmente mais rápidas.

Nota: para que saibam, a primeira vez que programei alguma coisa foi o My TV Shows, por isso é natural que não soubesse estes pequenos (grandes) pormenores. Vou aprendendo à medida que vou avançando.

Por isso, se tiverem mais alguma sugestão que deve ser feita e que eu não saiba, estou disponível para aprender :)


7 Comentários

Comente este artigo!

  1. Paulo Abreu

    Sugiro técnicas de cache.

  2. Gustavo Felisberto

    Eu se fosse a ti comprava um livrito sobre bases de dados e lia a teoria da coisa. Digo isto porque indices são uma coisa boa, mas não devemos abusar da coisa.

  3. Pedro Melo

    Olá,

    no mysql, podes activar um log de queries lentas.

    Assim, qq select que demore mais do que X segundos, ele mete no log.

    Fica mais fácil de apanhar essas coisas.

    Inté,

  4. JoaoJose

    Técnicas de Cache são ótimas e diminuem bastante o consumo de recursos. Nem sempre é possível utilizar Cache, mas com um pouco de esforço é possível diminuir bastante o acesso ao banco.

    Otimizações de banco também são interessantes, caso você faça bastante junções aconselho ler um pouco sobre VIEWs. VIEWs criam tabelas virtuais que armazenam os dados já filtrados e agrupados, economizando o tempo de junção.

    Outra otimização são CRON JOBs, você pode executar alguma tarefa complicada e custosa separadamente (exemplo redimensionamento de imagens), depois, quando a tarefa for concluída, enviar alguma resposta para o usuário.

  5. Francisco

    Caro Ivo,

    Parece-me fundamental que leia rapidamente um livro sobre bases de dados. Pode ser um daqueles guias simples, só mesmo para ficar com as noções do básico. Fazer SELECT’s numa base de dados não indexada é procurar uma agulha num palheiro.

    Já no que diz o Felisberto… nem 8 nem 80 mas uma base de dados não indexada… acho que não se pode chamar de base de dados. Deve ter um nome estilo “amalgama de informação” ou coisa do estilo.

    No post de cima tinha-lhe sugerido a Media Temple mas, dado este novo post, sugiro uma revisão profunda de SQL.

    Abraço e boa sorte para o projecto.

  6. Pedro Melo

    JoaoJose,

    as views não fazem nada disso. A querie é executada sempre totalmente.

    Isso é uma summary table, que o mysql não suporta (no sentido de não a mantém actualizada automágicamente).

    As views são usadas para limitar o acesso tipicamente, ou dar um interface mais simplificado a queries mais complexas.

    Inté,

  7. Dextro

    Bem, o MyTVShows parece um site novo :D

    BTW subscrevo o que foi dito aqui, procura um bom livrinho sobre SQL que é sempre uma boa ajuda.

Comente!

* Campo obrigatório, de modo a aparecer o seu nome como autor do comentário

* Campo obrigatório, mas não será mostrado no site

* Campo obrigatório, convém escrever alguma coisa ;)

São permitidas algumas tags HTML, como
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>