Usamos INNODB
para todas as nossas tabelas, mas eu tenho uma tabela especial, uma tabela de referência de mais de 100 GB (somente consultas de leitura nela).
Estamos carregando alterações nesta tabela em um trabalho em lote noturno usando LOAD DATA INFILE
.
MyISAM
é mais compacto e eficiente para uma mesa de referência. Mas esta seria a ÚNICA tabela MyISAM que usamos.
A carga de trabalho no restante das tabelas é um aplicativo da Web típico, exceto para 1 tabela que possui uma carga de gravação pesada e carga de leitura normal.
- Pergunta 1 - Vale a pena dedicar memória ao cache MyISAM apenas para esta tabela, quando sei que preciso de uma quantidade razoável de memória dedicada ao cache InnoDB para os outros casos de uso de carga de trabalho?
- Questão 2 - Quando eu executar
LOAD DATA INFILE 'from_nightly_batch' REPLACE INTO TABLE mytable
o MyISAM irá travar a tabela para leituras? Será InnoDB? por exemplo, posso usar a tabela de referência enquanto faço a atualização noturna em qualquer mecanismo?
Aqui está algo para realmente pensar
O MyISAM apenas armazena índices em cache, portanto, sempre há E/S de disco. O InnoDB armazena dados e índices em cache . Se você pudesse garantir que cada consulta que você chama nessa tabela só pode buscar as colunas necessárias e todas as colunas podem ser buscadas apenas no índice (chamado de índice de cobertura)
Aqui estão alguns links legais sobre índices de cobertura:
MyISAM pode fazer leituras compartilhadas. O InnoDB também pode.
Lembre-se de que as inserções, atualizações e exclusões do MyISAM executam bloqueios completos de tabelas todas as vezes (esse pode ser o caminho crítico para a E/S de disco ao fazer o InnoDB esperar sua vez em determinadas circunstâncias). Se a tabela estiver pronta, você pode querer usar um cache de chave MyISAM dedicado .
Inserções pesadas de
LOAD DATA INFILE
bloquearão a tabela MyISAM. O InnoDB pode tolerá-lo melhor, mas verifique o comportamento deLOAD DATA INFILE
para ver se ele bloqueia a tabela, independentemente do mecanismo de armazenamento.A compensação depende da frequência com que você escreve na tabela MyISAM.
POR FAVOR, NÃO JUNTE A TABELA MyISAM A QUALQUER TABELA INNODB !!! O bloqueio é desajeitado e as alterações do MyISAM não podem ser revertidas.