Mysql innodb_buffer_pool_size em relação a innodb_buffer_pool_instances

1

Eu corro um servidor virtual com uma instalação Owncloud nele. Agora Owncloud tem o problema de que a forma como é desenvolvido no momento, cada upload de arquivo causa uma pequena sobrecarga no MySQL.

Portanto, é muito importante tweek o banco de dados MySql da melhor forma possível. Há muitas pessoas na web que recomendam um innodb_buffer_pool_size muito grande até 4, 5 ou mais GByte, sim, alguns dizem até 70 até 80% do total de RAM, hmm?

Bom, mas poucas pessoas se importam com um segundo parâmetro chamado innodb_buffer_pool_instances

Então, vamos analisar minha situação. Minha máquina virtual tem recursos limitados. Isso significa 6400 GByte de RAM total e cerca de 3000 no modo normal (manipulado pelo libvirt). Então, se eu definir innodb_buffer_pool_instances em mais de 1 ou deixá-lo no conf padrão de servidores MySQL novos (8 ou algo assim) significa (desde que eu entendi direito) no pior dos casos, por exemplo innodb_buffer_pool_instances = 4 e innodb_buffer_pool_size = 4 = > 4 * 4 = 16 GB de uso de RAM em situações máximas. O que resultaria em mau uso do disco de swap e cada uso de swap para buffer innodb do MySql é um exagero para qualquer desempenho.

A conclusão é fácil. O tamanho do buffer disponível deve ser menor do que, pelo menos, bem, eu diria, em cerca de 70% do RAM disponível e o restante pode ser necessário para o php, o apache e o próprio sistema.

Então, quais seriam as melhores decisões? Apenas um possível innodb_buffer_pool_instances mas um muito grande innodb_buffer_pool_size ou melhor um menor innodb_buffer_pool_size e, portanto, mais innodb_buffer_pool_instances ao mesmo tempo, se necessário.

Meu servidor está em uso em cerca de 10 a 30 pessoas no máximo

    
por TheMAn 27.01.2016 / 23:58

2 respostas

1

innodb_buffer_pool_instances:

Você não pode ver seu efeito, a menos que innodb_buffer_pool_size seja poucos shows, dividir o buffer pool em instâncias separadas pode melhorar a eficiência. Essa também é uma prática de ajuste para innodb_buffer_pool_instance , para que cada instância do conjunto de buffers seja pelo menos 1 GB.

por exemplo, se innodb_buffer_pool_size = 4GB então, innodb_buffer_pool_instances = 4

MySQL 5.6 tem o padrão de 8

innodb_buffer_pool_size:

innodb_buffer_pool_size should be 80% of RAM

A idéia é apenas para servidor MySQL dedicado, onde nenhum outro processo está sendo executado. Por outro lado, o buffer pool não deve ser menor e ter RAM suficiente. Além disso, é necessário verificar se o sistema é de 64/32 bits.

    
por 28.01.2016 / 04:57
0

Acho que as melhores práticas para isso estão bem claras no link: link

Se os valores de innodb_buffer_pool_size estiverem em vários GB, podemos aumentar innodb_buffer_pool_instances para um número, para que cada instância tenha pelo menos 1 GB. Também para sistemas dedicados rodando mysql - innodb_buffer_pool_size pode ser configurado baseado na RAM do sistema disponível. Pode não seguir exatamente a regra de polegar de 70 a 80%. Eu tinha pesquisado sobre valores ótimos para isso com base na RAM do sistema e construí uma calculadora para computar innod_db_buffer_pool_size que está disponível como parte da postagem do blog: link

    
por 01.07.2018 / 19:54