A "melhor prática" é:
- Meça o desempenho, isolando o subsistema relevante o melhor que puder.
- Identifique a causa raiz do gargalo. Você está vinculado à E/S? Limite de CPU? Limite de memória? Aguardando bloqueios?
- Faça alterações para aliviar a causa raiz que você descobriu.
- Meça novamente para demonstrar que você corrigiu o gargalo e em quanto .
- Vá para a etapa 2 e repita conforme necessário até que o sistema funcione rápido o suficiente.
Assine o feed RSS em http://www.mysqlperformanceblog.com e leia seus artigos históricos também. Esse é um recurso extremamente útil para a sabedoria relacionada ao desempenho. Por exemplo, você perguntou sobre InnoDB vs. MyISAM. A conclusão deles:o InnoDB tem um desempenho ~30% maior do que o MyISAM em média. Embora também existam alguns cenários de uso em que o MyISAM supera o InnoDB.
Os autores desse blog também são coautores de "High Performance MySQL", o livro mencionado por @Andrew Barnett.
Re comentário de @ʞɔıu:Como saber se você é limitado por E/S versus limitado por CPU versus limitado por memória depende da plataforma. O sistema operacional pode oferecer ferramentas como ps, iostat, vmstat ou top. Ou talvez você precise obter uma ferramenta de terceiros se o seu sistema operacional não fornecer uma.
Basicamente, qualquer recurso que esteja atrelado a 100% de utilização/saturação provavelmente será seu gargalo. Se a carga da CPU for baixa, mas a carga de E/S estiver no máximo para o hardware, você estará vinculado à E/S.
Isso é apenas um ponto de dados, no entanto. O remédio também pode depender de outros fatores. Por exemplo, uma consulta SQL complexa pode estar fazendo uma classificação de arquivos e isso mantém a E/S ocupada. Você deve lançar hardware mais/mais rápido nele ou deve redesenhar a consulta para evitar a classificação de arquivos?
Existem muitos fatores para resumir em uma postagem do StackOverflow, e o fato de existirem muitos livros sobre o assunto suporta isso. Manter os bancos de dados operando de forma eficiente e fazendo o melhor uso dos recursos é um trabalho em tempo integral que exige habilidades especializadas e estudo constante.
Jeff Atwood acabou de escrever um bom artigo de blog sobre como encontrar gargalos em um sistema: