Você pode configurar
- All MyISAM
- Todo o InnoDB
- Mistura de MyISAM e InnoDB
Antes de alocar memória para qualquer um dos mecanismos, é bom refletir sobre o que é o cache com cada mecanismo de armazenamento
Configurando para MYISAM
O mecanismo principal usado é o cache de chaves. Apenas armazena em cache páginas de índice de arquivos .MYI. Para dimensionar seu cache de chaves, execute a seguinte consulta:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;
Isso dará a Configuração Recomendada para o MyISAM Key Cache ( key_buffer_size ) dado seu conjunto de dados atual ( a consulta limitará a recomendação em 4G (4096M). Para SO de 32 bits, 4 GB é o limite. Para 64 bits, 8 GB.
Configurando o InnoDB
O principal mecanismo usado é o InnoDB Buffer Pool. Ele armazena em cache dados e páginas de índice de tabelas InnoDB acessadas. Para dimensionar seu InnoDB Buffer Pool, execute a seguinte consulta:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;
Isso dará a Configuração Recomendada para o tamanho do InnoDB Buffer Pool ( innodb_buffer_pool_size ) dado o seu conjunto de dados atual.
Não se esqueça de redimensionar os arquivos de log do InnoDB (ib_logfile0 e ib_logfile1). MySQL Source Code coloca um limite dos tamanhos combinados de todos os arquivos de log do InnoDB deve ser < 4G (4096M). (NOTA: Os binários do Percona Server superam isso. Eu recentemente configurei um grande servidor de banco de dados com 4G para um único arquivo de log do InnoDB usando innodb_log_file_size )
Por questão de simplicidade, dados apenas dois arquivos de log, veja como você pode dimensioná-los:
- Etapa 1) adicione innodb_log_file_size = NNN para /etc/my.cnf (NNN deve ser 25% de innodb_buffer_pool_size ou 2047M, o que for menor)
- Etapa 2) service mysql stop
- Etapa 3) rm / var / log / mysql / ib_logfile [01]
- Etapa 4) serviço mysql start (ib_logfile0 e ib_logfile1 são recriados)
CAVEAT
No final de ambas as consultas, há uma consulta Inline: (SELECT 2 PowerOfTwo) B
-
(SELECT 0 PowerOf1024)
fornece a configuração em bytes -
(SELECT 1 PowerOf1024)
fornece a configuração em kilobytes -
(SELECT 2 PowerOf1024)
fornece a configuração em megabytes -
(SELECT 3 PowerOf1024)
fornece as configurações em gigabytes - Nenhum poder menor que 0 ou maior que 3 é aceito
EPÍLOGO
Não há substituto para o senso comum. Se você tiver memória limitada, uma mistura de mecanismos de armazenamento ou uma combinação dos mesmos, será necessário ajustar-se a diferentes cenários.
Se você tem 2GB de RAM e 16GB de InnoDB, aloque 512M como innodb_buffer_pool_size
.
Se você tem 2GB de RAM e 4GB de índices MyISAM, aloque 512M como key_buffer_size
.
Se você tem 2GB de RAM e 4GB de índices MyISAM e 16GB InnoDB, aloque 512M como key_buffer_size
e 512M como innodb_buffer_pool_size
.
Possíveis cenários são infinitos !!!
Lembre-se: o que quer que você aloque, deixe RAM suficiente para Conexões DB e o Sistema Operacional.