É prática comum misturar tabelas InnoDB e MyISAM no mesmo servidor?

21

Eu tenho um único banco de dados de cerca de 4,5 GB em execução em um servidor com 8 GB de RAM. A grande maioria das tabelas é MyIsam (cerca de 4,3 GB), mas em breve vou converter algumas delas no InnoDB. (Vai ser um processo lento, concentrando-se nas tabelas com maior intensidade de gravação no início).

Há algo de errado em executar um servidor dedicado em que ambos os tipos de mecanismos de armazenamento existem?

Derek Downey
fonte
Is there anything wrong with running a dedicated server where both types of storage engines exist? Talvez reformular para Multiple types?
John
A única razão pela qual eu disse 'ambos' é porque essa pergunta é sobre os dois principais mecanismos que estão configurados para serem 'afinados'. Estou tentando ignorar outros tipos de mecanismos como MEMORY ou MERGE, que são incomuns o suficiente para que afaik não sejam o objeto de ajuste de desempenho.
Derek Downey

Respostas:

18

Não há nada errado em usar vários mecanismos de armazenamento na mesma máquina física, desde que você entenda os prós e os contras de cada um. Existem considerações de desempenho, limitações de recursos e casos de uso para todos os tipos de armazenamento de plug-ins.

Por exemplo, se você tiver uma tabela pequena com 90% de gravação, poderá escolher MyISAM. Se os dados puderem ser regenerados facilmente e for uma tabela pequena, digamos para enfileiramento, você poderá escolher Memória. Se você tem uma tabela com 90% de leitura e os dados precisam estar lá quando você a procura, provavelmente escolheria um mecanismo de armazenamento que suporte transações e atomicidade configurável, como o InnoDB. Se você deseja acessibilidade através do sistema de arquivos sem dados prejudiciais, poderá escolher CSV.

No entanto, você pode usar com segurança vários mecanismos de armazenamento no mesmo esquema e no host físico.

Deixe-me notar, porém, que seus amortecedores desempenham um papel em toda essa bagunça. Se você usa o MyISAM e o InnoDB, precisará ter cuidado para que seu key_buffer e innodb_buffer_pool não contenham. Isso exigirá um planejamento cuidadoso de sua parte, mas é isso que fazemos.

randomx
fonte
4
+1 Outro caso de uso comum é o MyISAM para tabelas que exigem pesquisa de texto completo e o InnoDB para todas as outras tabelas.
Asafe
@ Assef: Mesmo no momento do seu comentário, o InnoDB suportava índices de texto completo .
BlueRaja - Danny Pflughoeft
2
^^^^ "Recursos do MySQL 5.6" não era do GA até
05-02-2013
1
@randymelder Ótima resposta. Você seria capaz de elaborar o que quis dizer com "Você precisará ter cuidado para que seu key_buffer e innodb_buffer_pool não contenham"?
Neel 16/10
1
Quero provar que estou errado, mas a lógica parece oposta a este stackoverflow.com/a/6796566/5645769 aqui.
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ
7

Não sei dizer se essa é uma prática comum. Eu posso dizer sobre minha própria experiência.

Eu sempre uso a melhor ferramenta para o trabalho, então eu misturo motores o tempo todo. A maioria dos meus projetos usa o MyISAM como o mecanismo padrão.

Quando preciso de recursos especiais disponíveis apenas no InnoDB, vou em frente.

Quando uma tabela é principalmente somente leitura, escolho o mecanismo de arquivamento antes de poder piscar.

Sabendo que o servidor da máquina possui memória suficiente, todos os meus dados temporários são armazenados nas tabelas Heap.

Vi no passado algumas lentidões misturando MyISAM e InnoDB, mas este não é um problema específico do MySQL. É um problema de design que não aparece quando você usa apenas um mecanismo. Na verdade, usar o mecanismo errado causa mais lentidão, não importa se é apenas o MyISAM, apenas o InnoDB ou uma mistura dos dois. É difícil definir uma fórmula para saber quando a desaceleração aconteceria. Apenas testes reais podem dizer isso para você.

Obviamente, você não poderia preservar a integridade e a consistência misturando o InnoDB e o MyISAM em uma consulta exclusiva.

Maniero
fonte
O mecanismo de arquivamento não suporta indexação, por que você o armazena em arquivamento.
user4951
0

Eu tento evitar misturar tabelas MyISAM e InnoDB no mesmo banco de dados, mas isso é mais por razões de sanidade do que por razões práticas. No entanto, acho útil ter um banco de dados com tabelas MyISAM para pesquisa de texto completo, para que eu possa executá-lo em sites. Mantê-lo em um banco de dados separado com uma chave estrangeira para cada entrada facilita para qualquer outro desenvolvedor que trabalha no banco de dados ver o que está acontecendo.

Kenzo
fonte
Como você pode ter chaves estrangeiras ao usar o MyISAM?
precisa saber é o seguinte
Terminologia errada, mas funciona como uma chave estrangeira. Eu armazeno o número de identificação do item da tabela InnoDB e o uso para fazer a pesquisa de página no resultado da pesquisa.
7119 Kenzo