A maneira de ajustar o InnoDB é centrada em torno
- InnoDB Buffer Pool: armazena em cache as páginas de dados e as páginas de índice. A quantidade de dados e índice que você pode armazenar em cache não é uma função das restrições de espaço em disco, mas uma função da memória e espaço em disco disponíveis atualmente usados pelo InnoDB.
- MetaData do InnoDB: Por padrão, o arquivo ibdata1 normalmente abriga tudo e qualquer coisa do InnoDB. Isso incluiria páginas de dados, páginas de índice, metadados da tabela, dados do MVCC .
Aqui está uma fórmula que eu usei nos últimos 5 anos para calcular o InnoDB Buffer Pool com base no espaço em disco usado pelos dados e páginas de índice do InnoDB :
SELECT CONCAT(ROUND(KBS/POWER(1024,IF(Power1024<0,0,
IF(Power1024>3,0,Power1024)))+0.49999),SUBSTR(' KMG',IF(Power1024<0,0,
IF(Power1024>3,0,Power1024))+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 Power1024) B;
- Use (SELECIONAR 0 Power1024) para bytes
- Use (SELECT 1 Power1024) para KB
- Use (SELECT 2 Power1024) para MB
- Use (SELECT 3 Power1024) para GB
- Use (SELECT 4 Power1024) para TB (envie-me um e-mail se tiver TerraBytes de RAM)
Obviamente, eu disse uma função da memória e espaço em disco disponíveis atualmente usados pelo InnoDB. A partir daqui, basta usar o bom senso. O número recomendado da consulta acima não deve exceder 75% da RAM instalada !!! Essa é a regra de ouro mais simples para dimensionar o InnoDB Buffer Pool.
Você também deve definir innodb_flush_method como O_DIRECT, pois ele fornecerá gravações síncronas estáveis do InnoDB. Também escrevi um post sobre como otimizar o armazenamento em disco para o InnoDB .
Com relação à mensagem A tabela não suporta otimizar, ao invés de recriar + analisar , a razão pela qual você recebe essa mensagem de erro é o fato de o mecanismo de armazenamento ser o InnoDB. Mecanicamente, OPTIMIZE TABLE apenas copia a tabela para uma tabela temporária e executa ANALYZE TABLE .
Na realidade, ANALYZE TABLE contra o InnoDB é completamente inútil. Mesmo se você executou ANALYZE TABLE em uma tabela InnoDB, o mecanismo de armazenamento InnoDB executa mergulhos no índice para aproximações de cardinalidade repetidas vezes, destruindo assim as estatísticas que você acabou de compilar. De fato, a Percona realizou alguns testes no ANALYZE TABLE e também chegou à mesma conclusão .
Aqui estão outras postagens que fiz ao longo do ano sobre o InnoDB Tuning