Tenho algumas perguntas para os mais familiarizados. A maioria das minhas instâncias está executando o Antelope apesar de ter suporte para o Barracuda.
Eu estava procurando brincar com algumas tabelas innodb compactas. Meu entendimento é que isso só está disponível no formato Barracuda.
- Vejo que o innodb_file_format é dinâmico, então posso alternar sem um salto. Existem quaisquer implicações de fazer isso que eu deveria estar ciente. Tudo o que posso dizer é que significa que novas tabelas ou alteradas posteriormente serão criadas com esse formato. Isso tudo está correto?
- Eu esperava não ter que passar e converter todas as minhas tabelas. É kosher ter tabelas de antílopes e barracudas coexistindo no mesmo espaço de tabela? Mesmo que funcione , há alguma pegadinha para procurar?
Pelo que li e reuni dos meus testes, as respostas são: Sim. Sim. Não tenho certeza.
Atualizar
Eu tenho executado com algumas tabelas dinâmicas e compactadas em várias instâncias desde este post sem problemas. Além disso, deixei de ler http://dev.mysql.com/doc/refman/5.5/en/innodb-file-format-identifying.html na época.
Depois de habilitar um determinado innodb_file_format, essa alteração se aplica apenas às tabelas recém-criadas, e não às existentes. Se você criar uma nova tabela, o tablespace que contém a tabela será marcado com o formato de arquivo “mais antigo” ou “mais simples” necessário para os recursos da tabela. Por exemplo, se você habilitar o formato de arquivo Barracuda e criar uma nova tabela que não seja compactada e não use ROW_FORMAT=DYNAMIC, o novo tablespace que contém a tabela será marcado como usando o formato de arquivo Antelope.
Assim, as tabelas serão criadas como Antelope mesmo se você permitir Barracuda. A mistura é inevitável, a menos que você especifique cada tabela como row_format dinâmica ou uma tabela compactada.
Não há indicação de que você deva fazer um dump completo e recarregar ao introduzir sua primeira tabela Barracuda (como é recomendado ao atualizar as versões principais do mysql )
Então, estou respondendo a esta pergunta com quase 4 anos de atraso:
Os formatos de arquivo InnoDB foram concebidos em uma época em que o InnoDB era independente do MySQL Server (por exemplo: o MySQL 5.1 podia executar duas versões diferentes do InnoDB).
A razão pela qual você não gostaria de executar o Barracuda (em 2012) é que ele poderia reduzir a flexibilidade no downgrade do MySQL (ou seja, após uma atualização com falha, você deseja voltar para uma versão que não pode ler um formato mais recente). ou seja, não deve haver razões técnicas pelas quais o Antelope é melhor.
No MySQL 5.7 a
innodb_file_format
opção foi preterida. Como o MySQL e o InnoDB não são mais independentes, o InnoDB pode usar as regras de atualização do MySQL e qual compatibilidade com versões anteriores é necessária. Nenhuma configuração confusa necessária!No MySQL 5.7, o padrão mudou para
Barracuda/DYNAMIC
. Como todas as versões do MySQL atualmente suportadas podem ler este formato, é seguro se afastar do Antelope e ainda oferecer downgrade.Em um servidor MySQL 5.7, as tabelas Antelope serão atualizadas para
Barracuda/DYNAMIC
a próxima reconstrução da tabela (OPTIMIZE TABLE etc). Isso é, a menos que eles tenham sido criados especificamente comROW_FORMAT=oldrowformat
.No MySQL 8.0, a opção
innodb_file_format
é removida.O MySQL 5.7 também apresenta a opção
innodb_default_row_format
, cujo padrão é DYNAMIC. Isso aborda o ponto em sua atualização.Se você realmente quer jogar com o InnoDB usando o formato Barracuda, você deve mysqldump tudo para algo como /root/MySQLData.sql. Isso torna o formato do arquivo de dados independente.
Use outra instância do MySQL com um novo ibdata1 e innodb_file_per_table (opcional, minha preferência pessoal). Altere o formato do arquivo com ibdata1 vazio. Em seguida, recarregue /root/MySQLData.sql e brinque com os dados.
Eu ouvi pequenas histórias de terror sobre o PostgreSQL ter que ajustar as configurações para obter um banco de dados 8.2.4 para trabalhar com binários 9.0.1. A mesma história poderia se aplicar se tentássemos fazer com que ambos os formatos de arquivo residissem no mesmo tablespace do sistema (ibdata1) e/ou
.ibd
arquivo se estivermos cientes de tais configurações.Quanto a ser kosher...
Antelope
eBarracuda
dentro do mesmo ibdata1ATUALIZAÇÃO 2013-07-05 14:26 EDT
Acabei de responder a esta pergunta em ServerFault: Configurando MySQL INNODB Compression KEY_BLOCK_SIZE . Isso me fez olhar para trás em busca de quaisquer perguntas que respondi no DBA StackExchange havia discutido o
Barracuda
formato e encontrei este meu post antigo. Vou colocar a mesma informação aqui...De acordo com a documentação do MySQL sobre compressão InnoDB para Barracuda
Observe que o InnoDB Buffer Pool precisa carregar páginas de dados e páginas de índice lidas para atender às consultas. Ao ler uma tabela e seus índices pela primeira vez, a página compactada deve ser descompactada para 16K. Isso significa que você terá o dobro de conteúdo de dados no buffer pool, a página de dados compactada e não compactada.
Se essa duplicação de conteúdo de dados estiver ocorrendo no Buffer Pool, você precisará aumentar innodb_buffer_pool_size por um pequeno fator linear da nova taxa de compactação. Aqui está como:
CENÁRIO
key_block_size=8
8
é50.00%
de16
50.00%
de8G
é4G
innodb_buffer_pool_size
para12G
(8G
+4G
)key_block_size=4
4
é25.00%
de16
25.00%
de8G
é2G
innodb_buffer_pool_size
para10G
(8G
+2G
)key_block_size=2
2
é12.50%
de16
12.50%
de8G
é1G
innodb_buffer_pool_size
para9G
(8G
+1G
)key_block_size=1
1
é06.25%
de16
06.25%
de8G
é0.5G
(512M
)innodb_buffer_pool_size
para8704M
(8G
(8192M
) +512M
)MORAL DA HISTÓRIA : O InnoDB Buffer Pool só precisa de mais espaço para respirar ao lidar com dados compactados e páginas de índice.