Eu tenho 170 GB de InnoDB
índice e dados.
Eu tenho que reajustar o tamanho do innodb_buffer_pool para melhor desempenho. O tamanho máximo da tabela do InnoDB (índice + dados) é 28 GB.
Então, qual deve ser o tamanho ideal de innodb_buffer_pool.
ATUALIZAR
vamos migrar nosso banco de dados local para o 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á.
Arquivo por tabela está habilitado.
Estou usando máquina Linux.
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 servidor de banco de dados atual .
Aqui está uma maneira mais granular de determinar innodb_buffer_pool_size para um novo servidor de banco de dados, dado o conjunto de dados atualmente carregado no pool de buffers InnoDB do servidor de banco de dados atual.
Execute o seguinte em 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, você deve definir innodb_buffer_pool_size para 75% da RAM do servidor de banco de dados.
Se IBPPctFull for menor que 95%, execute esta fórmula:
IBPSize = IPS X IBPDataPages / (1024*1024*1024) X 1.05
.O número de 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 o maior Amazon EC2 RAM Config, use 75% da RAM para o Amazon EC2 DB Server.
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 que são usadas com mais frequência 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 ver 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 em JP
Então, com isso em mente, agora sei que as tabelas de usuários e lances ocupam cerca de 640 MB de espaço em disco, são usadas com muita frequência de acordo com o JP e o que 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 usadas, eu definiria innodb_buffer_pool_size em 640 MB.
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.
De 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 SO. No Windows, você pode usar o Process Explorer para analisar o uso da memória. No Linux, você tem sysstat, free, htop, top e vmstat.
O banco de dados é composto apenas de tabelas Innodb ou uma mistura de Innodb e MyISAM? Se for uma mistura dos dois, vou separar memória para o key_cache, variáveis de junção, cache de consulta, etc. Você pode calcular mais tarde sua taxa de acertos do MyISAM quando o servidor estiver em produção.
Depois que o servidor estiver em produção
Qual é a taxa de acerto atual do Innodb?
Qual é a taxa de acerto do cache de chave
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 sua tabela se encaixam no seu buffer_pool consultando este link, que fornece uma maneira de mostrar "quantas páginas estão no buffer pool para determinada tabela (cnt), quantas delas estão sujas (sujas) , e qual é a porcentagem de ajuste de índice 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/