Einige Magento-Tabellen sind nicht InnoDB. Ist es sicher, alle Tabellen in InnoDB zu konvertieren?

16

Ich verwende AWS RDS Read Replica. Es gibt ständig Probleme mit den Memory Engine-Tabellen von Magento. Für Backup und Read Replicas liebt RDS InnoDB. Kann ich alle Tabellen sicher auf InnoDB umstellen?

Zusätzlich bekomme ich folgende Warnung von AWS:

DB-Instanz magento-monin-prod-db enthält MyISAM-Tabellen, die nicht nach InnoDB migriert wurden. Diese Tabellen können sich auf Ihre Fähigkeit auswirken, Wiederherstellungen zu bestimmten Zeitpunkten durchzuführen. Ziehen Sie in Betracht, diese Tabellen in InnoDB zu konvertieren. Weitere Informationen finden Sie unter http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.MySQL.CommonDBATasks.html#MySQL.CommonDBATasks.Tables

Plausible Antwort

Ich bin immer noch an Feedback interessiert. Ich werde dies als Antwort hinzufügen, wenn ich innerhalb der nächsten 24 Stunden keine Probleme finde. Die Schritte, die ich unten unternommen habe, scheinen bisher sicher zu sein. Meine größte Sorge galt den Memory Engine-Tabellen von Magento (Tabellen mit der Endung in_tmp) und den möglichen Auswirkungen auf die Indizierung.

Folgendes habe ich getan:

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

    • Für mich gab es hauptsächlich temporäre Indextabellen und Magento-Modultabellen, also nicht viele wichtige Kerntabellen, um die man sich Sorgen machen muss, und nur wenige Tabellen, die ich problemlos ausführen kann, wenn etwas den Fan trifft.
  2. Für jeden zurückgegebenen Tisch habe ich ausgeführt: Alter table {table-name} ENGINE=InnoDB;

Ich wäre nervös, dies zu versuchen, wenn keine Ihrer Tabellen InnoDB sind. Wie ich bereits sagte, gab es auf meiner Instanz nur wenige Kerntabellen, die geändert werden mussten.

TylersSN
quelle
Haben Sie das schon lange in Produktion? Wenn ja, wie läuft es? Hat es Ihnen Probleme bereitet? Denken Sie in erster Linie an die * _tmp-Indextabellen, die derzeit die MEMORY-Engine sind.
Michael Parkin
1
Ich habe nichts Ungewöhnliches bemerkt.
TylersSN
Großartig, danke für die Bestätigung - wir werden es versuchen und auch zurückmelden.
Michael Parkin
@ Michael Parkin denken Sie daran, dass wir Solr-Suche verwenden. Lesen Sie die anderen Antworten, die erläutern, wie sich dies möglicherweise auf die Suche auswirkt.
TylersSN
1
Wir haben dies in den meisten unserer Produktionsstätten ausgeführt (MariaDB 10.0), alle Tabellen (einschließlich Speicher) werden als InnoDB ausgeführt - funktioniert hervorragend
Michael Parkin

Antworten:

11

Es ist in Ordnung, den Datentyp in InnoDB zu ändern, sofern eine der folgenden Bedingungen erfüllt ist:

  1. Sie verwenden MySQL 5.6.4+, wobei die InnoDB- Speicher-Engine die Volltextsuche unterstützt
  2. Sie verwenden nicht die standardmäßige Magento Search-Funktionalität, die auf den zugrunde liegenden MyISAM-Volltextsuchfunktionen basiert. Diese Funktionalität ist anfangs mühsam, und die in der Standard-Magento-Suche bereitgestellten Funktionen lassen zu wünschen übrig. Daher würde ich vorschlagen, Lucene oder Sphinx oder die beste noch von Algolia gehostete Suche zu verwenden.

Persönlich würde ich empfehlen, dies mit dem Magento DB Repair Tool zu tun, um das Risiko zu minimieren und auch nach anderen Abweichungen oder Problemen bei der DB-Konfiguration zu suchen. InnoDB ist die ideale Engine, ungeachtet der Volltextbeschränkungen .

Bryan 'BJ' Hoffpauir Jr.
quelle
1
Wir verwenden die Solarsuche. Wir sollten uns also in Bezug auf die Suche im Klaren sein.
TylersSN
Ich würde InnoDB überhaupt nicht als den idealen Motor betrachten. Es ist im Vergleich zu MyISAM extrem langsam, wenn Sie viele Suchanfragen haben. Ich höre oft, dass InnoDB Updates schneller ausführt und die meisten Abfragen Updates sind, so dass es schneller ist. Ich sehe das Gegenteil. Für jede Site, die ich habe, habe ich weit mehr Suchanfragen, die Anfragen aktualisieren / hinzufügen. Ich habe versucht, alle meine Tabellen auf InnoDB umzustellen, und die Ladezeit der Seite ist von im Grunde genommen ohne Verzögerung (vielleicht 0,1 Sekunden) auf 10 Sekunden gestiegen! Ich habe alles zurück in MyISAM konvertiert, weil es die ideale Engine für Geschwindigkeit ist (und die Volltextsuche unterstützt).
Tim Eckel
Tim, ich bin einverstanden, hauptsächlich, weil ich immer wieder gesehen habe, dass @ ben-lessani-sonassi sich als absolut korrekt erwiesen hat und MySQL selten eine WIRKLICHE Belastung für die Gesamtleistung mit der Anzahl ANDERER Systeme darstellt Optimierung für Antworten unter 800 ms auch unter Last erforderlich, ABER InnoDB ist der Schlüssel b / c Mage Core schreibt in DB ~ 10X, um jede Benutzer- "Ansicht" -Aktion zu protokollieren, und Solr ist am besten für Suchleistung und -qualität geeignet :)
Bryan 'BJ' Hoffpauir Jr.
1
Wie verarbeitet die Konvertierung von InnoDB alle diese Fremdschlüsselbeziehungen und wie vollständig sind Löschvorgänge, die vom Löschen in Kaskaden aus diesen Schlüsselbeziehungen abhängen? Mit anderen Worten, wie gehen Sie mit dem Müll um, der übrig bleibt, wenn Sie nicht die richtigen Beziehungen haben?
Fiasco Labs
@FiascoLabs Es ist schon eine Weile her, dass ich diesen Kommentarthread durchgesehen habe, aber der Fokus des Q / A liegt auf der Konvertierung von FROM MyISAM TO InnoDB. Ich vermute, diejenigen, die die von Ihnen erwähnten relationalen Funktionen haben, sind wahrscheinlich bereits InnoDB. MyISAM unterstützt ab MySQL 5.7 weder
FKs
2

Afaik sollten Sie nicht alle Tabellen in InnoDB konvertieren.

catalogsearch_fulltext sollte MyISAM bleiben, da InnoDB keine Volltextsuche unterstützt, zumindest nicht bis MySQL 5.6 (iirc).

Für alle anderen Tabellen sollte es jedoch sicher sein.

Simonthesorcerer
quelle
2
Es wird in MySQL 5.6.4+ unterstützt
Bryan 'BJ' Hoffpauir Jr.
2

Ich habe gerade die MySQL-Standard-Engine in InnoDB geändert und die meisten meiner Magento-Tabellen haben sich auf wundersame Weise in InnoDB verwandelt (einige sind immer noch MyISAM und einige sind Memory).

Ich dachte nur, ich würde das teilen ...

Roy Toledo
quelle