Algum problema com a conversão do MyISAM para o InnoDB?

11

Estou pronto para mudar do MyISAM para o InnoDB, mas queria saber se havia uma lista completa de itens a serem procurados? Por exemplo, eu não vi nenhuma lista mencionar que a execução DISABLE KEYSem uma tabela do InnoDB emitirá um aviso, exceto a página de manual de ALTER TABLE. É esse tipo de coisa que preciso saber antes de converter novamente. Eu pensei que ficaria bem com minhas perguntas, mas aparentemente não.

Andrew
fonte

Respostas:

7

Aqui estão algumas dicas

Uso de memória

MyISAM

InnoDB

  • armazena em cache páginas de dados e páginas de índice.
  • um buffer pool e um tamanho antes do MySQL 5.5
  • 1 ou mais buffer pools começando no MySQL 5.5

Aqui estão algumas perguntas que escrevi e publiquei anteriormente sobre como escolher um tamanho adequado para o cache de chaves do MyISAM e o pool de buffers do InnoDB .

Índices FULLTEXT

MyISAM

  • Suporta índices FULLTEXT

InnoDB

  • Começando com o MySQL 5.6, sim, mas ainda na versão beta (UPDATE: MySQL 5.6 existe e possui índices FULLTEXT. Se você estiver usando a indexação FULLTEXT no MySQL 5.6, verifique se você está usando as opções FULLTEXT específicas do InnoDB )
  • Antes do MySQL 5.6, isso significa que você não pode converter MyISAM em InnoDB.

MySQL 5.5 e vice-versa

Para localizar quais tabelas MyISAM possuem um índice FULLTEXT, execute esta consulta:

select tbl.table_schema,tbl.table_name from
(
    select table_schema,table_name
    from information_schema.tables
    where engine='MyISAM'
    and table_schema NOT IN ('information_schema','mysql')
) tbl
INNER JOIN
(
    select table_schema,table_name
    from information_schema.statistics
    where index_type='FULLTEXT'
) ndx
USING (table_schema,table_name);

O que sair dessa consulta não poderá ser convertido para o InnoDB até você atualizar para o MySQL 5.6.

OTIMIZAR TABELA

MyISAM

  • A tabela MyISAM está reduzida
  • ANALYZE TABLE executa estatísticas de índice em todos os índices

InnoDB

RolandoMySQLDBA
fonte
Graças para a consulta, pequeno erro de digitação no entanto: "eng" em vez de "motor"
Andrew
@RolandoMySQLDBA: Você pode adicionar que o InnoDB não possui índices espaciais.
precisa saber é o seguinte
2

Eu acho que o maior problema seria o innodb ser transacional. Você quer saber se as bibliotecas MySQL que estão sendo usadas pelos seus aplicativos auto_commit por padrão ou não.

Python , por exemplo, não é confirmado automaticamente. Isso significa que, se um aplicativo estiver inserindo uma linha imediatamente antes de fechar sua conexão, essa inserção será revertida após a alteração para innodb. O script python, por exemplo, precisa ter certeza de chamar connection.commit ();

Outro ponto de diferença pode estar relacionado às inserções ou atualizações de várias linhas. Considere uma única inserção de várias linhas

insert into tbl values (...row1...),  (...row2...),  (...rowN....);

Considere o que acontece se houver algum tipo de erro, como uma colisão de chave exclusiva na linha3. Com o MyISAM, as duas primeiras linhas teriam sido escritas; no innodb, todas as linhas que estavam sendo gravadas seriam revertidas, deixando nada escrito até mesmo com esse erro.

Com o innodb, você entrará no mundo dos impasses. Eles não são inerentemente ruins, a menos que ocorram com tanta frequência para impedir que qualquer trabalho seja realizado. No entanto, seus aplicativos precisarão ser codificados de forma a antecipar conflitos e manipulá-los adequadamente (o que provavelmente significa apenas tentar novamente).

Considere as limitações de memória / armazenamento. O Innodb consome muito mais recursos do que o MyISAM. Se você tem RAM suficiente para manter seus buffer pools grandes o suficiente para acomodar todas as suas tabelas, então você está dourado.

Procure tabelas que tenham grandes chaves primárias. A indexação em cluster do Innodb significa que cada índice secundário mantém outra cópia da PK da linha correspondente. Se você tiver 2 índices secundários, isso significa que cada linha PK é armazenada 3 vezes (PK + cada índice). Se o pk se estender por vários tipos de dados de colunas e grandes (char (N) por exemplo), você poderá ver como os requisitos de índice podem explodir rapidamente no innodb.

atxdba
fonte