O MySQL pode aproveitar efetivamente 64 GB de RAM?

22

Estamos nos deparando com um problema em que consultar uma tabela com aproximadamente 50 milhões de linhas e um tamanho de índice de 4 GB (tamanho da tabela de cerca de 6 GB) resulta na troca de memória do servidor de banco de dados e diminui drasticamente. Tenho certeza que isso tem a ver com o tamanho da tabela temporária que está sendo excedida, e ela está sendo trocada para o disco.

Se eu atualizei meu servidor de banco de dados de 32 GB de RAM para 64 GB de RAM, estou pensando se o banco de dados MySQL será capaz de aproveitar totalmente essa memória adicional e não trocar. Já passei por algumas das variáveis (por exemplo, KEY_BUFFER_SIZE, etc ...) e elas parecem oferecer suporte a valores de configuração acima de 64 GB. No entanto, a documentação do MySQL diz que o tmp_table_size atinge o máximo de 4 GB.

Então, a atualização da memória valeria a pena? O problema "consulta-grande-tabela" se beneficiaria disso, ou não ajudaria por causa do limite de 4 GB? Eu sei que existem potencialmente outras soluções como reestruturar a tabela para serem particionadas de maneiras diferentes, etc ... mas sem alterar nada sobre a tabela, memória adicional ajudaria?

Além disso, em geral, existem outras variáveis relacionadas à memória que o MySQL não seria capaz de aproveitar ao passar de 32 para 64 GB de RAM?

Estamos usando o Linux de 64 bits (Ubuntu) como nosso servidor de banco de dados.

Obrigado Galeno

    
por Galen 13.08.2010 / 19:46

4 respostas

5

Se você estiver usando o InnoDB, a variável mais importante a ser definida é innodb_buffer_pool_size . Eu configuraria para aproximadamente 80% da memória do seu sistema. Quando os caches forem aquecidos após algum uso, seus dados mais ativos (conjunto de dados de trabalho) estarão na memória (innodb_buffer_pool_size) e suas operações devem ser muito rápidas. Com 64GB de memória, você pode definitivamente se encaixar muito lá. A memória é sempre uma boa compra para servidores de banco de dados.

    
por 15.08.2010 / 17:49
11

Sim - se você usa o InnoDB e tem uma carga de trabalho intensiva em leitura, você pode tirar proveito de grandes quantidades de RAM [supondo que seu conjunto de dados caiba em memória - seu servidor será muito rápido].

Estou usando o MySQL com armazenamento InnoDB em servidores de 8 a 16 GB com ajuste de conjunto de trabalho na memória.

    
por 13.08.2010 / 19:58
9

Talvez valha a pena investir tempo e esforço extra na pesquisa do que está causando a troca do sistema antes de gastar dinheiro em memória?

32 GB de memória deixam muita memória disponível mesmo depois de carregar a tabela inteira, o índice e o temp_table máximo na memória. Uma pesquisa rápida levantou essas duas partes da documentação que podem ser relevantes:

por 13.08.2010 / 23:20
0

Se você acha que é devido a uma tabela temporária muito grande sendo criada, você pode considerar maneiras de melhorar a consulta para evitar tabelas temporárias.

Você poderia postar no Stackoverflow uma postagem contendo o esquema, a consulta, o plano de explicação e alguns detalhes sobre o problema.

    
por 12.09.2010 / 09:48