Eu tenho 170 GB de InnoDB
índice e dados.
Eu tenho que reajustar o tamanho innodb_buffer_pool para obter melhor desempenho. O tamanho máximo da tabela de uma tabela do InnoDB (índice + dados) é 28 GB.
Então, qual deve ser o tamanho ideal de innodb_buffer_pool.
ATUALIZAR
nós vamos migrar nosso banco de dados local para ec2, então definiremos a RAM de acordo com as estatísticas atuais do innodb, por isso preciso do tamanho do buffer pool para que possamos ter RAM disponível lá.
O arquivo por tabela está ativado.
Eu estou usando uma máquina Linux.
Respostas:
A maior tabela que você possui representa 16,47% (28/170) do total de dados. Mesmo que a tabela tenha sido altamente escrita e lida, nem todos os 28G da tabela são carregados no buffer pool em um determinado momento. O que você precisa calcular é quanto do InnoDB Buffer Pool é carregado a qualquer momento no DB Server atual .
Aqui está uma maneira mais granular de determinar innodb_buffer_pool_size para um novo servidor de banco de dados, considerando o conjunto de dados atualmente carregado no InnoDB Buffer Pool do servidor de banco de dados atual.
Execute o seguinte na sua Instância MySQL atual (servidor do qual você está migrando)
Execute a fórmula
IBPPctFull = IBPDataPages * 100.0 / IBPTotalPages
.Se IBPPctFull for 95% ou mais, defina innodb_buffer_pool_size para 75% da RAM do servidor de banco de dados.
Se IBPPctFull é inferior a 95%, executar esta fórmula:
IBPSize = IPS X IBPDataPages / (1024*1024*1024) X 1.05
.O número do IBPSize (em GB) é o número que melhor se ajusta ao seu conjunto de dados de trabalho real.
Agora, se o IBPSize ainda for muito grande para a maior configuração de RAM do Amazon EC2, use 75% da RAM do servidor de banco de dados do Amazon EC2.
fonte
Estou fornecendo esta resposta como informação complementar à resposta de Rolando abaixo.
Antes do servidor estar em produção
Calcule innodb_buffer_pool_size com base nas maiores tabelas mais usadas pelo MySQL. Para identificar as maiores tabelas com base em seu tamanho no banco de dados, você pode usar este script:
Agora que sabemos quais tabelas são as maiores em nosso banco de dados, precisamos determinar quais são as mais usadas. Para fazer isso, eu usaria um programa de criação de perfil como o Jet Profiler (JP) para examinar quais tabelas estão sendo mais acessadas. O JP mostrará quais tabelas estão sendo acessadas com mais frequência. Aqui está uma captura de tela dessa seção no JP
Então, com isso em mente, agora eu sei que as tabelas de usuários e lances ocupam cerca de 640 MB de espaço em disco, elas são usadas com muita frequência de acordo com o JP e isso significa que o MySQL armazenará seus índices e dados no buffer pool como Rolando menciona abaixo em seus comentários.
Para garantir que o MySQL tivesse memória suficiente para armazenar dados para minhas tabelas maiores e mais frequentemente usadas, eu definiria innodb_buffer_pool_size em 640MB.
Existem algumas considerações adicionais, mas elas não se aplicam ao innodb_buffer_pool_size.
Este é um sistema de 32 bits ou 64 bits? Em um sistema de 32 bits, você está limitado a 4 GB, a menos que ative o PAE. No Windows, isso significa executar as edições Windows Enterprise ou Datacenter.
Quanta memória os outros processos em execução no seu sistema precisam? Em um servidor MySQL dedicado, deixarei entre 5% e 10% para o sistema operacional. No Windows, você pode usar o Process Explorer para analisar o uso da memória. No Linux, você possui sysstat, free, htop, top e vmstat.
O banco de dados é composto apenas de tabelas Innodb ou de uma mistura de Innodb e MyISAM? Se for uma mistura dos dois, reservarei memória para o key_cache, juntarei variáveis, cache de consultas, etc. Você poderá calcular posteriormente a taxa de acertos do MyISAM quando o servidor estiver em produção.
Após o servidor estar em produção
Qual é a taxa de acerto atual do Innodb?
Qual é a taxa de acertos do cache de chaves
Normalmente, tento obter a proporção o mais próximo possível de 100%.
Quão bem suas tabelas se encaixam no buffer pool
Você também pode ver como os dados da tabela se ajustam ao buffer_pool consultando este link, que fornece uma maneira de mostrar "quantas páginas há no buffer pool para uma determinada tabela (cnt), quantas estão sujas (sujas) e qual é a porcentagem de índice que cabe na memória (fit_pct). " Aplica-se apenas ao servidor Percona
http://www.mysqlperformanceblog.com/2010/12/09/how-well-does-your-table-fits-in-innodb-buffer-pool/
fonte