Eines meiner Projekte verwendet die MyISAM-Engine in MySQL, aber ich überlege, sie in InnoDB umzuwandeln, da ich hier und da Transaktionsunterstützung benötige.
Ja absolut, es gibt viele Dinge, Sie sollten Ihre Anwendung sehr gründlich testen:
Der Migrationsprozess selbst muss sorgfältig geplant werden, da es sehr lange dauern wird, wenn Sie viele Daten haben (während dieser Zeit sind die Daten entweder schreibgeschützt oder gar nicht verfügbar - überprüfen Sie das!)
Es gibt einen großen Vorbehalt. Wenn Sie während eines Schreibvorgangs Hardwarefehler (oder Ähnliches) bekommen, wird InnoDB Tabellen korrumpieren.
MyISAM wird auch, aber ein mysqlcheck - Auto-Reparatur wird sie reparieren. Dies mit InnoDB-Tabellen zu versuchen schlägt fehl. Ja, das ist aus Erfahrung.
Dies bedeutet, dass Sie einen guten regelmäßigen Datensicherungsplan für die Verwendung von InnoDB benötigen.
Einige andere Anmerkungen:
InnoDB verteilt keinen freien Speicherplatz im Dateisystem, nachdem Sie eine Tabelle / Datenbank gelöscht oder einen Datensatz gelöscht haben. Dies kann durch "Dumping und Importieren" oder durch Festlegen von innodb_file_per_table=1
in my.cnf gelöst werden.
Das Hinzufügen / Entfernen von Indizes in einer großen InnoDB-Tabelle kann ziemlich schmerzhaft sein, da es die aktuelle Tabelle sperrt, eine temporäre mit Ihren geänderten Indizes erstellt und Daten - Zeile für Zeile - einfügt. Es gibt ein Plugin von Innobase , aber es funktioniert nur für MySQL 5.1
InnoDB ist auch VIEL MEHR speicherintensiv, ich schlage vor, dass Sie eine so große innodb_buffer_pool_size
Variable haben, wie Ihr Server-Speicher erlaubt (70-80% sollte eine sichere Wette sein). Wenn Ihr Server UNIX / Linux ist, sollten Sie die sysctl-Variable vm.swappiness
auf 0 reduzieren und innodb_flush_method=O_DIRECT
verwenden, um eine doppelte Pufferung zu vermeiden. Testen Sie immer, wenn Sie swap drücken, wenn Sie diese Werte wechseln. Weitere Informationen finden Sie im Blog von Percona , das ist großartig.
Sie können auch mysqlbackup
mit --single-transaction --skip-lock-tables
ausführen und haben keine Tabellensperren, während die Sicherung beginnt.
In jedem Fall ist InnoDB großartig, lassen Sie sich von einigen Fallstricken nicht entmutigen.
Nur die Tabelle zu ändern und den Motor einzustellen, sollte in Ordnung sein.
select count(*) from MyTable
in InnoDB langsamer ist als MyISAM
Wenn Sie beabsichtigen, InnoDB als Möglichkeit zum Abrufen von gleichzeitigen Abfragen zu verwenden, sollten Sie innodb_file_trx_commit=1
so einstellen, dass Sie etwas Leistung zurückbekommen. OTOH, wenn Sie Ihre Anwendung so umstellen möchten, dass sie transaktionsbewusst ist, dann ist die Entscheidung für diese Einstellung Teil der allgemeinen Leistungsüberprüfung, die für die InnoDB-Einstellungen erforderlich ist.
Die andere wichtige Sache, auf die Sie achten sollten, ist, dass InnoDB weder FullText-Indizes noch INSERT DELAYED unterstützt. Aber dann unterstützt MyISAM referentielle Integrität nicht. : -)
Sie können jedoch nur die Tabellen durchlaufen, für die Sie eine Transaktion benötigen. Ich habe das getan. Kleine Tabellen (bis zu mehreren tausend Zeilen) können übrigens oft spontan geändert werden.
Tags und Links mysql innodb myisam change-management