Algumas tabelas Magento não são o InnoDB, é seguro converter todas as tabelas para o InnoDB?

16

Estou usando a réplica de leitura do AWS RDS. Ele constantemente apresenta problemas com as tabelas de mecanismo de memória do Magento. Para réplicas de backup e leitura, o RDS adora o InnoDB. Posso alterar com segurança todas as tabelas para o InnoDB?

Além disso, recebo o seguinte aviso da AWS:

Instância de banco de dados magento-monin-prod-db contém tabelas MyISAM que não foram migradas para o InnoDB. Essas tabelas podem afetar sua capacidade de executar restaurações pontuais. Considere converter essas tabelas para o InnoDB. Consulte http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.MySQL.CommonDBATasks.html#MySQL.CommonDBATasks.Tables

Resposta plausível

Ainda interessado em feedback. Adicionarei isso como resposta se não encontrar nenhum problema nas próximas 24 horas. Até agora, os passos que segui abaixo parecem seguros. Minha maior preocupação eram as tabelas do Mecanismo de Memória do Magento (tabelas terminadas em in_tmp) e o impacto que isso poderia ter na indexação.

Aqui está o que eu fiz:

  1. SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE (ENGINE = 'Memory' OR ENGINE='MyIsam') AND TABLE_SCHEMA='magento_db'

    • Para mim, isso retornou principalmente tabelas de índices temporárias e tabelas de módulos magento, portanto, não há muitas tabelas principais críticas para se preocupar e poucas tabelas suficientes para que eu possa executar facilmente outra tabela de alterações se algo atingir o ventilador.
  2. Para cada tabela retornada, executei: Alter table {table-name} ENGINE=InnoDB;

Eu ficaria nervoso em tentar isso se nenhuma de suas mesas for InnoDB. Mas, como eu disse antes, havia apenas algumas tabelas principais na minha instância que precisavam ser modificadas.

TylersSN
fonte
Você está executando isso em produção há muito tempo? Se sim, como está indo? Isso causou algum problema? Pensando principalmente nas tabelas de índice * _tmp que atualmente são o mecanismo MEMORY.
Michael Parkin
11
Eu não notei nada incomum.
TylersSN
Ótimo, obrigado por confirmar. Vamos dar uma chance e relatar também.
Michael Parkin 28/01
@michael parkin lembre-se de que estamos usando a pesquisa Solr. Veja as outras respostas que mostram como isso pode afetar a pesquisa.
precisa saber é o seguinte
11
Fomos correndo este na maioria dos nossos locais de produção (MariaDB 10,0), todas as tabelas (incluindo Memory) funcionando como InnoDB - funciona muito bem
Michael Parkin

Respostas:

11

Não há problema em alterar o tipo de dados para InnoDB, supondo que um dos seguintes seja verdadeiro:

  1. Você está usando o MySQL 5.6.4+, onde o mecanismo de armazenamento InnoDB suporta pesquisa de texto completo
  2. Você não está usando a funcionalidade Magento Search padrão, que depende dos recursos subjacentes de pesquisa de texto completo do MyISAM. Essa funcionalidade é problemática para começar e o conjunto de recursos fornecido no Magento Search padrão deixa muito a desejar, então eu sugiro usar o Lucene ou Sphinx ou, melhor ainda, a pesquisa hospedada em Algolia .

Pessoalmente, eu recomendaria fazer isso com a Magento DB Repair Tool para minimizar o risco e também verificar qualquer outro desvio ou problema na configuração do DB. O InnoDB é o mecanismo ideal, apesar das limitações de texto completo .

Bryan 'BJ' Hoffpauir Jr.
fonte
11
Estamos usando a pesquisa solar. Portanto, devemos ser claros no que diz respeito à pesquisa.
precisa saber é o seguinte
Eu não consideraria o InnoDB o mecanismo ideal. É extremamente lento comparado ao MyISAM se você tiver muitas consultas de pesquisa. Costumo ouvir que o InnoDB é mais rápido fazendo atualizações e a maioria das consultas são atualizações, por isso é mais rápido. Eu vejo o total oposto. Para cada site que possuo, tenho muito mais consultas de pesquisa que atualizam / adicionam consultas. Tentei mudar todas as minhas tabelas para o InnoDB e o tempo de carregamento da página passou de basicamente sem atraso (talvez 0,1 segundo) para 10 segundos! Eu converti tudo de volta para o MyISAM porque é o mecanismo ideal para velocidade (e suporta a pesquisa de texto completo).
precisa
Tim, eu "tipo" de concordar, principalmente porque eu vi repetidas vezes que @ ben-lessani-sonassi é simplesmente correto e provado correto e o MySQL raramente é um empecilho REAL no desempenho geral com o número de OUTROS sistemas que precisa de otimização para respostas abaixo de 800ms, mesmo em carga, mas o InnoDB é a chave b / c O Mage Core está gravando no DB ~ 10X para registrar cada ação de "visualização" de cada usuário, mais o Solr é melhor para a pesquisa e a qualidade da pesquisa :)
Bryan 'BJ' Hoffpauir Jr.
11
Então, como a conversão do que deveria ser o InnoDB lida com todos esses relacionamentos de chaves estrangeiras e quão completas são as exclusões que dependem da exclusão em cascata desses relacionamentos de chaves? Em outras palavras, como você lida com o lixo que sobrará por não ter os relacionamentos no lugar?
Fiasco Labs
@FiascoLabs Já faz um tempo desde que eu verifiquei este tópico de comentários, mas o foco do Q / A é converter DE MyISAM PARA InnoDB. Eu estou supondo que aqueles que têm os recursos relacionais que você mencionou provavelmente já são o InnoDB. O MyISAM não suporta FK nem Transações a partir do MySQL 5.7, embora o InnoDB o desvie um pouco do padrão SQL
Bryan 'BJ' Hoffpauir Jr.
2

Depois, você não deve converter todas as tabelas para o InnoDB.

catalogsearch_fulltext deve permanecer MyISAM, porque o InnoDB não tem suporte à pesquisa de texto completo, pelo menos até o MySQL 5.6 (iirc).

Para todas as outras tabelas, no entanto, deve ser seguro.

simonthesorcerer
fonte
2
É suportado no MySQL 5.6.4+
Bryan 'BJ' Hoffpauir Jr.
2

Acabei de alterar o mecanismo padrão do MySQL para InnoDB e a maioria das minhas tabelas Magento se transformou milagrosamente em InnoDB (algumas ainda são MyISAM e outras são Memory).

Só pensei em compartilhar isso ...

Roy Toledo
fonte