Algunas tablas de Magento no son InnoDB, ¿es seguro convertir todas las tablas a InnoDB?

16

Estoy usando la réplica de lectura de AWS RDS. Constantemente tiene problemas con las tablas del motor de memoria de Magento. Para las réplicas de copia de seguridad y lectura, RDS ama a InnoDB. ¿Puedo cambiar de forma segura todas las tablas a InnoDB?

Además, recibo la siguiente advertencia de AWS:

La instancia de base de datos magento-monin-prod-db contiene tablas MyISAM que no se han migrado a InnoDB. Estas tablas pueden afectar su capacidad para realizar restauraciones de punto en el tiempo. Considere convertir estas tablas a InnoDB. Consulte http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.MySQL.CommonDBATasks.html#MySQL.CommonDBATasks.Tables

Respuesta plausible

Todavía interesado en comentarios. Agregaré esto como respuesta si no encuentro ningún problema en las próximas 24 horas. Los pasos que tomé a continuación parecen ser seguros, hasta ahora. Mi mayor preocupación eran las tablas de Memory Engine de Magento (tablas que terminaban en_tmp) y el impacto que podría tener en la indexación.

Aquí esta lo que hice:

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

    • Para mí, esto devolvió principalmente tablas de índice temporales y tablas de módulos de magento, por lo que no hay muchas tablas fundamentales críticas de las que preocuparse y pocas tablas suficientes para poder ejecutar fácilmente otra tabla alternativa si las cosas golpean al ventilador.
  2. Para cada tabla devuelta ejecuté: Alter table {table-name} ENGINE=InnoDB;

Estaría nervioso probar esto si ninguna de sus tablas es InnoDB. Pero, como dije antes, solo había unas pocas tablas principales en mi instancia que debían modificarse.

TylersSN
fuente
¿Has estado ejecutando esto en producción durante mucho tiempo? Si es así, ¿cómo te va? ¿Te causó algún problema? Pensando principalmente en las tablas de índice * _tmp que actualmente son el motor de MEMORIA.
Michael Parkin
1
No he notado nada inusual.
TylersSN
Genial, gracias por confirmar, lo intentaremos e informaremos también.
Michael Parkin
@michael parkin tenga en cuenta que estamos usando la búsqueda Solr. Vea las otras respuestas que hablan de cómo esto podría afectar la búsqueda.
TylersSN
1
Hemos estado ejecutando esto en la mayoría de nuestros sitios de producción (MariaDB 10.0), todas las tablas (incluida Memory) ejecutándose como InnoDB - funciona muy bien
Michael Parkin

Respuestas:

11

Está bien cambiar el tipo de datos a InnoDB, suponiendo que uno de los siguientes es verdadero:

  1. Está utilizando MySQL 5.6.4+ donde el motor de almacenamiento InnoDB admite la búsqueda de texto completo
  2. No está utilizando la funcionalidad predeterminada de búsqueda de Magento que se basa en las capacidades subyacentes de búsqueda de texto completo de MyISAM. Para empezar, esa funcionalidad es problemática y el conjunto de características que se proporciona en la búsqueda predeterminada de Magento deja mucho que desear, por lo que sugeriría usar Lucene o Sphinx o la mejor búsqueda alojada en Algolia .

Personalmente, recomendaría hacer esto con la herramienta de reparación de DB Magento para minimizar el riesgo y también verificar cualquier otra deriva o problemas de configuración de DB. InnoDB es el motor ideal, a pesar de las limitaciones de texto completo .

Bryan 'BJ' Hoffpauir Jr.
fuente
1
Estamos usando la búsqueda solar. Por lo tanto, deberíamos estar claros en lo que respecta a la búsqueda.
TylersSN
No consideraría a InnoDB el motor ideal en absoluto. Es extremadamente lento en comparación con MyISAM si tiene muchas consultas de búsqueda. A menudo escucho que InnoDB es más rápido haciendo actualizaciones y la mayoría de las consultas son actualizaciones, por lo que es más rápido. Veo todo lo contrario. Por cada sitio que tengo, tengo muchas más consultas de búsqueda que actualizan / agregan consultas. ¡Intenté cambiar todas mis tablas a InnoDB y el tiempo de carga de la página pasó básicamente de ningún retraso (quizás 0.1 segundos) a 10 segundos! Volví todo a MyISAM porque es el motor ideal para la velocidad (y admite la búsqueda de texto completo).
Tim Eckel
Tim, estoy "DE ACUERDO", sobre todo porque he visto una y otra vez que @ ben-lessani-sonassi está totalmente comprobado que es correcto y MySQL rara vez es un lastre REAL en el rendimiento general con el # de OTROS sistemas que necesita optimización para respuestas de menos de 800 ms, incluso en la carga PERO InnoDB es clave b / c Mage Core está escribiendo en DB ~ 10X para registrar cada acción de "vista" del usuario más Solr es lo mejor para el rendimiento de búsqueda y la calidad :)
Bryan 'BJ' Hoffpauir Jr.
1
Entonces, ¿cómo la conversión de lo que se supone que es InnoDB maneja todas esas relaciones de clave externa y qué tan completas son las eliminaciones que dependen de la eliminación en cascada de esas relaciones fkey? En otras palabras, ¿cómo manejas la basura que quedará al no tener las relaciones en su lugar?
Fiasco Labs
@FiascoLabs Ha pasado un tiempo desde que revisé este hilo de comentarios, pero el enfoque de la Q / A es convertir DE MyISAM A InnoDB. Supongo que los que tienen las características relacionales que su mención probablemente ya sean InnoDB. MyISAM no admite FK ni Transacciones a partir de MySQL 5.7, aunque InnoDB lo hace aunque se desvía un poco del estándar SQL
Bryan 'BJ' Hoffpauir Jr.
2

Afaik no debe convertir todas las tablas a InnoDB.

catalogsearch_fulltext debería permanecer MyISAM, porque InnoDB no tiene soporte de búsqueda de texto completo, al menos hasta MySQL 5.6 (iirc).

Sin embargo, para todas las demás tablas, debería ser seguro.

simonthesorcerer
fuente
2
Es compatible con MySQL 5.6.4+
Bryan 'BJ' Hoffpauir Jr.
2

Acabo de cambiar el motor predeterminado de MySQL a InnoDB y la mayoría de mis tablas de Magento se transformaron milagrosamente a InnoDB (algunas siguen siendo MyISAM y algunas son Memory).

Solo pensé en compartir esto ...

Roy Toledo
fuente