Como otimizar o uso de memória do MySQL?

9

MINHA CONFIGURAÇÃO ( exemplo )

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

  • 7 GB de memória
  • 20 unidades de computação EC2 (8 núcleos virtuais com 2,5 unidades de computação EC2 cada)
  • 1690 GB de armazenamento de instância local
  • 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 / necessário para maximizar as velocidades de consulta. Eu sei que há um monte de MySQL opções de configuração de memória gosta key_buffer_sizee MyISAM_sort_buffer_size,mas eu estou familiarizado com a otimização destes.

QUESTÕES

  1. Como verificar a memória que o MySQL está usando atualmente em um sistema Linux?
  2. Como se maximiza / otimiza o uso da memória MySQL?
  3. Supondo que minhas consultas e esquema sejam otimizados, que outras alterações devo considerar?
T. Brian Jones
fonte
você pode verificar com o programa htop.
neworld 27/09/11
Maximizar o uso da memória não armazenará todo o banco de dados na memória. Você tem que ter sistema de arquivos baseado em RAM ...
4
O sistema de arquivos baseado em RAM não é seguro. Se o servidor travar, todos os dados serão perdidos
neworld 27/09

Respostas:

7

Este é um tópico difícil. Não pode ser respondida aqui, livros inteiros foram escritos sobre isso. Eu recomendo fazer o 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:

http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/2007/11/01/innodb- Noções básicas sobre otimização de desempenho / http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

EDITAR:

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

santiago.basulto
fonte
2
Concordado, eles são bancos de dados bem pequenos demais falando relativamente. Se você espera uma tonelada de acesso de leitura ao banco de dados, considere algum tipo de sistema de armazenamento em cache, como o memcached, que seu aplicativo pode usar para armazenar valores do banco de dados e reduzir as ocorrências no banco de dados. Se você estiver fazendo principalmente inserções, o disco será um fator muito importante. Até certo ponto, a pergunta depende de quais são seus casos de uso. Se os dados não estão mudando muito, o cache de consultas do mysql também deve ajudar muito em consultas mais rápidas. Verifique também se seus índices / chaves primárias estão corretos.
precisa saber é o seguinte
+1 você é irmão certo. Eu supunha que ele estava pedindo uma cobrança básica, mas é importante considerar o uso do DB e outras coisas. Novamente, não pode ser discutido aqui, eu acho.
Santiago.basulto
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 FULLTEXThabilidades de pesquisa do MySQL , não haverá problemas sérios.

No caso do MyISAM, vários caches são utilizados, incluindo buffers internos do MySQL e cache do sistema. Se você deseja um melhor desempenho, precisa deixar espaço para qualquer um dos caches, mas ainda não recomendo o MyISAM para esse fim, especialmente se seus bancos de dados tiverem muita gravação: o MyISAM bloqueia toda a tabela na gravação, enquanto o InnoDB bloqueia apenas as linhas afetadas.

Mesmo se você colocar todos os seus bancos de dados na memória, ainda poderá ter consultas de execução lenta devido a índices insuficientes ou outros motivos.

sanmai
fonte