Como otimizar o uso de memória do MySQL?

9

MINHA CONFIGURAÇÃO ( exemplo )

Estou executando o Linux em uma instância do Amazon EC2 Extra Grande com as seguintes especificações:

  • 7 GB de memória
  • 20 Unidades computacionais EC2 (8 núcleos virtuais com 2,5 Unidades computacionais EC2 cada)
  • 1690 GB de armazenamento de instâncias locais
  • plataforma de 64 bits

Eu tenho dois grandes bancos de dados MySQL em execução no mecanismo de armazenamento MyISAM. Um é de 2 GB e o outro é de 500 MB. Eu gostaria de ter certeza de que o MySQL está usando o máximo de RAM possível para maximizar as velocidades de consulta. Eu sei que há um monte de opções de configuração de memória do MySQL, como key_buffer_size e MyISAM_sort_buffer_size, , mas eu não estou familiarizado com a otimização.

PERGUNTAS

  1. Como alguém verifica qual memória o MySQL está usando atualmente em um sistema Linux?
  2. Como alguém maximiza / otimiza o uso de memória do MySQL?
  3. Supondo que minhas consultas e esquemas estejam otimizados, que outras alterações devo considerar?
por T. Brian Jones 28.09.2011 / 00:06

2 respostas

7

Este é um tema difícil. Não pode ser respondido aqui, todo o livros foi escrito sobre isso. Eu recomendo fazer seu innodb_buffer_pool_size grande o suficiente. Se você estiver usando tabelas myisam, verifique key_buffer_size. Também table_cache e max_connections devem ser considerados.

Aqui está algo que pode ajudá-lo:

link link link

EDITAR:

Como @ drew010 disse que é importante considerar o tipo de uso que o DB possui. O tunning para um DB pesado lido é muito diferente de uma gravação pesada. Além disso, você pode considerar outras estratégias. Como o Memcached, bancos de dados nosql, etc.

    
por 28.09.2011 / 01:27
1

Se você precisa ter certeza de que o MySQL usa toda a memória necessária, você precisa mudar para o InnoDB. A menos que você use as habilidades de pesquisa do MySQL FULLTEXT , não haverá problemas sérios.

No caso do MyISAM, um número de caches é colocado em uso, incluindo buffers de chaves internas do MySQL e cache do sistema. Se você quer o melhor desempenho, você precisa deixar espaço para qualquer um dos caches, mas eu não recomendo o MyISAM para esse propósito, especialmente se seus bancos de dados são pesados: o MyISAM bloqueia a tabela inteira na gravação, enquanto o InnoDB bloqueia apenas as linhas afetadas. / p>

Mesmo que você coloque todos os seus bancos de dados na memória, ainda poderá ter consultas de execução lenta devido a índices insuficientes ou outras razões.

    
por 28.09.2011 / 02:17