Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Calculando o tamanho do pool de buffer do InnoDB para o seu servidor MySQL

O que é um pool de buffers InnoDB?

O buffer pool do InnoDB é o espaço de memória que contém muitas estruturas de dados na memória do InnoDB, buffers, caches, índices e até mesmo dados de linha. innodb_buffer_pool_size é o parâmetro de configuração do MySQL que especifica a quantidade de memória alocada para o pool de buffer InnoDB pelo MySQL. Esta é uma das configurações mais importantes na configuração de hospedagem do MySQL e deve ser configurada com base na RAM do sistema disponível.

Nesta postagem, vamos orientá-lo através de duas abordagens para definir o valor do tamanho do buffer pool do InnoDB, examinar os prós e contras dessas práticas e também propor um método exclusivo para chegar a um valor ideal com base no tamanho da RAM do sistema.

Abordagem 1. Método da regra prática

A prática mais comumente seguida é definir esse valor em 70% – 80% da RAM do sistema. Embora funcione bem na maioria dos casos, esse método pode não ser ideal em todas as configurações. Vamos pegar o exemplo de um sistema com 192 GB de RAM. Com base no método acima, chegamos a cerca de 150 GB para o tamanho do buffer pool. No entanto, esse não é realmente um número ideal, pois não aproveita totalmente o grande tamanho de RAM disponível no sistema e deixa para trás cerca de 40 GB de memória. Essa diferença pode ser ainda mais significativa à medida que passamos para sistemas com configurações maiores, onde deveríamos utilizar mais a RAM disponível.

Abordagem 2. Uma abordagem mais sutil

Essa abordagem é baseada em uma compreensão mais detalhada dos componentes internos do pool de buffers do InnoDB e suas interações, o que é muito bem descrito no livro High Performance MySQL.

Vejamos o método a seguir para calcular o tamanho do buffer pool do InnoDB.

  1. Comece com o total de RAM disponível.
  2. Subtraia o valor adequado para as necessidades do SO.
  3. Subtraia a quantidade adequada para todas as necessidades do MySQL (como vários buffers do MySQL, tabelas temporárias, pools de conexão e buffers relacionados à replicação).
  4. Divida o resultado por 105%, que é uma aproximação da sobrecarga necessária para gerenciar o próprio pool de buffers.

Por exemplo, vamos ver um sistema com 192 GB de RAM usando apenas InnoDB e com um tamanho total de arquivo de log de cerca de 4 GB. Podemos usar uma regra como ‘máximo de 2 GB ou 5% do total de RAM’ para alocação de necessidades do sistema operacional, conforme recomendado no livro acima, que chega a cerca de 9,6 GB. Em seguida, também alocaremos cerca de 4 GB para outras necessidades do MySQL, principalmente levando em consideração o tamanho do arquivo de log. Esse método resulta em cerca de 170 GB para o tamanho do buffer pool do InnoDB, que é cerca de 88,5% de utilização do tamanho de RAM disponível.

Embora tenhamos usado a regra "máximo de 2 GB ou 5% do total de RAM" para calcular nossa alocação de memória para as necessidades do SO acima, a mesma regra não funciona muito bem em todos os casos , especificamente para sistemas com RAMs de tamanho médio entre 2 GB e 32 GB. Por exemplo, em um sistema com 3 GB de RAM, alocar 2 GB para as necessidades do sistema operacional não deixa muito para o pool de buffers do InnoDB, enquanto alocar 5% de RAM é muito pouco para as necessidades do nosso sistema operacional.

Então, vamos ajustar a regra de alocação do SO acima e examinar o método de computação InnoDB em várias configurações de RAM:

Para sistemas com RAM pequena (<=1 GB)

Para sistemas rodando com menos de 1 GB de RAM, é melhor usar o valor de configuração padrão do MySQL de 128 MB para o tamanho do buffer pool do InnoDB.

Para sistemas com RAM de tamanho médio (1 GB – 32 GB)

Considerando o caso de sistemas com tamanho de RAM de 1 GB a 32 GB, podemos calcular as necessidades do SO usando esta heurística aproximada:

256 MB + 256 * log2(tamanho da RAM em GB)

A racionalização aqui é que, para configurações de pouca RAM, começamos com um valor base de 256 MB para as necessidades do SO e aumentamos essa alocação em uma escala logarítmica conforme a quantidade de RAM aumenta. Dessa forma, podemos criar uma fórmula determinística para alocar RAM para nossas necessidades de SO. Também alocaremos a mesma quantidade de memória para nossas outras necessidades do MySQL. Por exemplo, em um sistema com 3 GB de RAM, faríamos uma alocação justa de 660 MB para as necessidades do sistema operacional e outros 660 MB para outras necessidades do MySQL, resultando em um valor de cerca de 1,6 GB para o tamanho do buffer pool do InnoDB.

Para sistemas com RAM de tamanho superior (> 32 GB)

Para sistemas com tamanhos de RAM superiores a 32 GB, voltaríamos a calcular as necessidades do SO como 5% do tamanho de RAM do nosso sistema e a mesma quantidade para MySQL outras necessidades. Portanto, para um sistema com tamanho de RAM de 192 GB, nosso método chegará a cerca de 165 GB para o tamanho do buffer pool do InnoDB, que é novamente um valor ideal a ser usado.

Calculadora de tamanho do pool de buffers InnoDB

Calcule o valor ideal para qualquer tamanho de RAM:





InnoDB Buffer Pool Size Calculator - Calcular o número ideal para qualquer tamanho de RAM do sistemaClick To Tweet

Gráfico do tamanho do pool de buffers do InnoDB para vários tamanhos de RAM



Atenção para cálculos de tamanho do pool de buffers do InnoDB

As considerações nesta postagem do blog são para sistemas Linux dedicados ao MySQL. Para sistemas Windows ou sistemas que executam vários aplicativos junto com o MySQL, essas observações podem ser imprecisas. Também é importante observar que, embora possamos usar essas ferramentas como referências, é realmente necessária uma boa experiência, experimentação, monitoramento contínuo e ajuste fino para obter o dimensionamento certo para seu innodb_buffer_pool_size.