O MySQL pode efetivamente tirar proveito da RAM de 64 GB?

22

Estamos enfrentando um problema ao consultar uma tabela que possui aproximadamente 50 milhões de linhas e um tamanho de índice de 4 GB (tamanho da tabela de cerca de 6 GB) resulta no servidor de banco de dados trocando memória e diminuindo drasticamente. Tenho certeza de que isso tem a ver com o tamanho da tabela temporária que está sendo excedido e que está sendo trocado para o disco.

Se eu atualizei meu servidor de banco de dados de 32 GB de RAM para 64 GB de RAM, gostaria de saber se o banco de dados MySQL poderá tirar proveito total dessa memória adicional e não trocar. Analisei algumas das variáveis ​​(por exemplo, KEY_BUFFER_SIZE, etc ...) e elas parecem suportar 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 de memória valeria a pena? O problema "consultar a tabela grande" se beneficiaria com isso ou não ajudaria devido ao limite de 4 GB? Eu sei que existem outras soluções potencialmente, como reestruturar a tabela para ser particionada de maneiras diferentes, etc ... mas sem alterar nada sobre a tabela, a 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 a 64 GB de RAM?

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

Obrigado, Galen

Galen
fonte

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 sistema. Depois que você fizer o aquecimento dos caches 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 deverão ser muito rápidas. Com 64 GB de memória, você definitivamente pode se encaixar muito nele. A memória é sempre uma boa compra para servidores de banco de dados.

vmfarms
fonte
11

Sim - se você usa o InnoDB e possui uma carga de trabalho com muita leitura, pode tirar proveito de grandes quantidades de RAM [supondo que seu conjunto de dados caiba no mem - seu servidor será rápido demais].

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

pQd
fonte
O mesmo aqui - executamos o InnoDB em caixas de 64 GB e é ótimo.
James
9

Talvez valha a pena dedicar algum tempo e esforço extra para pesquisar o que está causando a troca do sistema antes de gastar dinheiro em memória?

32 GB de memória deixam bastante 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 trouxe essas duas partes da documentação que podem ser relevantes:

Martin
fonte
0

Se você acha que é devido à criação de uma tabela temporária muito grande, considere as maneiras de melhorar a consulta para evitar tabelas temporárias.

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

MarkR
fonte