Melhor configuração do my.cnf para um servidor MySQL de 8GB com MyISAM

3

Estou preparando uma grande instalação baseada no Drupal 6.x e configurei um servidor MySQL dedicado com 8GB de RAM. O Drupal 6.x usa apenas o mecanismo MyISAM e haverá cerca de 500 usuários simultâneos usando o site por meio de dois nós da web.

Aqui está um dump da análise do primer de ajuste do mysql, eu o peguei no início da manhã, pois não tenho certeza se isso deve ser executado durante o uso intenso ou não: link .

Eu não sou muito experiente na configuração do mysql, então estou procurando ajuda para determinar a configuração correta para o arquivo my.cnf para que eu possa sustentar a quantidade de carga. Eu preciso disso em uma base muito urgente, então não estou procurando recursos para entender (pelo menos não agora!).

Obrigado antecipadamente!

    
por Mohammad Emran Hasan 30.01.2012 / 03:34

3 respostas

8

Eu não conheço o drupal. Mas como você pediu, você precisa da configuração MyIsam MySql dedicada. Para MyIsam eu tenho algumas recomendações como

key_buffer_size

Tamanho do Key Buffer, usado para cache de blocos de índice para tabelas MyISAM.  Não o configure com mais de 30% de sua memória disponível, pois alguns  também é requerido pelo SO para armazenar as linhas em cache. Mesmo se você não estiver usando  Tabelas MyISAM, você ainda deve configurá-lo para 8-64M, como também será  usado para tabelas de disco temporárias internas. Portanto, você deve configurá-lo de 2 GB para 3 GB .

read_buffer_size

Tamanho do buffer usado para fazer varreduras de tabela completa de tabelas MyISAM. Alocado por thread, se uma varredura completa for necessária .. Você deve configurá-lo para 8MB para 16MB.

read_rnd_buffer_size

Ao ler linhas na ordem classificada após uma classificação, as linhas são lidas através deste buffer para evitar buscas em disco. Você pode melhorar ORDER BY desempenho muito, se definir isso para um valor alto. Alocado por thread, quando necessário.

bulk_insert_buffer_size

O MyISAM usa um cache especial em forma de árvore para fazer inserções em massa (ou seja, INSERT ... SELECT, INSERT ... VALUES (...), (...), ... e LOAD DATA INFILE) mais rápido. Esta variável limita o tamanho da árvore de cache bytes por thread. Definir como 0 desativará essa otimização. Faz não defini-lo maior que "key_buffer_size" para desempenho ideal. Esse buffer é alocado quando uma inserção em massa é detectada. Defina como 512 MB a 1 GB.

myisam_sort_buffer_size

Esse buffer é alocado quando o MySQL precisa reconstruir o índice Instruções de tabela REPAIR, OPTIMIZE, ALTER, bem como em LOAD DATA INFILE em uma mesa vazia. Ele é alocado por thread, então tenha cuidado com grandes configurações. Então você deve configurá-lo para 2M

myisam_max_sort_file_size

O tamanho máximo do arquivo temporário que o MySQL tem permissão para usar recriando o índice (durante REPAIR, ALTER TABLE ou LOAD DATA INFILE. Se o tamanho do arquivo for maior que isso, o índice será criado através do cache de chaves (que é mais lento). Defina como você precisa.

myisam_repair_threads 

Se uma tabela tiver mais de um índice, o MyISAM pode usar mais de um thread para repará-los, classificando em paralelo. Isso faz sentido se você tem várias CPUs e muita memória. Configure-a para 1.

myisam_recover

Verifica e conserta automaticamente tabelas MyISAM não fechadas.

    
por 09.02.2012 / 06:13
2

Na verdade, o Drupal (mesmo 6.x) prefere rodar no InnoDB. MyISAM é o padrão, sim, mas isso é simplesmente por causa de um esforço consciente para oferecer suporte a hosters que não oferecem InnoDB - consulte link . Consequentemente, eu recomendo strongmente que você reconsidere seu uso exclusivo do MyISAM.

Uma ressalva se aplica a isto: as tabelas search_ * usam índices FULLTEXT, que não são compatíveis com o InnoDB. Deixe esses MyISAM, ou melhor ainda, substitua sua funcionalidade por algo como o Apache Solr.

Se você usar o mysqltuner.pl depois de converter para o InnoDB, a menos que tenha sido atualizado recentemente, ele não se incomodará em dizer para você configurar o innodb_buffer_pool, que é a maior chave de performance para o InnoDB.

O processo de conversão do MyISAM para o InnoDB é sem perdas e relativamente rápido; é apenas um simples ALTER TABLE sometable ENGINE=InnoDB . Certifique-se de ter configurado innodb_buffer_pool antes de fazer isso ou você pode esperar por muito tempo!

Por fim, gostaria de mencionar rapidamente que um provedor de hospedagem com experiência em implantações em larga escala do Drupal cuidaria da maioria ou de todas essas etapas para você. Considere conversar com o BlackMesh - para quem trabalho - ou outro host ativo na comunidade do Drupal. Eles provavelmente serão capazes de oferecer suporte adicional específico ao Drupal e recomendações de escalabilidade conforme você continua a expandir seu site.

Boa sorte!

    
por 01.02.2012 / 17:01
1
  1. Sim, você deseja executá-lo com carga real e não carga falsa. Os números são sobre como as coisas funcionaram no passado, então, se não for como a carga real, eles não ajudarão tanto quanto poderiam.

  2. Apenas faça o que o mysqltuner lhe diz.

Se você não tem tempo para aprender os detalhes de ajuste do produto e quer apenas seguir as melhores práticas, o mysqltuner é para você! Ele faz exatamente isso: capturar as recomendações de práticas recomendadas e dizer o que alterar com base no seu uso real.

    
por 30.01.2012 / 03:37