Wichtig: Bitte konvertieren Sie keine Systemtabellen von MySQL
in der mysql
-Datenbank (wie etwa
user
oder host
) in den Typ
InnoDB
. Diese Operation wird nicht
unterstützt. Die Systemtabellen müssen immer den Typ
MyISAM
haben.
Wenn Sie alle Tabellen (außer den Systemtabellen) als
InnoDB
-Tabellen anlegen möchten, fügen Sie
einfach die Zeile
default-storage-engine=innodb
in den
[mysqld]
-Abschnitt Ihrer Serveroptionsdatei
ein.
InnoDB
kennt im Gegensatz zu
MyISAM
keine spezielle Optimierung für eine
separate Indexerstellung. Daher lohnt es sich nicht, zuerst die
Tabellen zu exportieren und importieren und danach die Indizes
anzulegen. Der schnellste Weg, eine Tabelle in
InnoDB
zu ändern, besteht darin, die
Einfügeoperationen direkt auf der
InnoDB
-Tabelle vorzunehmen. Verwenden Sie
also ALTER TABLE … ENGINE=INNODB
oder
erzeugen Sie eine leere InnoDB
-Tabelle mit
denselben Definitionen und fügen Sie darin die Zeilen mit
INSERT INTO … SELECT * FROM …
ein.
Wenn Sie UNIQUE
-Constraints auf
Sekundärschlüsseln haben, können Sie einen Tabellenimport
beschleunigen, indem Sie die Eindeutigkeitsprüfungen während
der Importoperation vorübergehend abschalten:
SET UNIQUE_CHECKS=0;
... import operation ...
SET UNIQUE_CHECKS=1;
Bei großen Tabellen spart das eine Menge Festplattenzugriffe,
da InnoDB
dann seinen Insert-Puffer nutzen
kann, um die Sekundärindexeinträge in einer Batch-Operation zu
schreiben.
Um eine bessere Kontrolle über den Einfügungsprozess zu haben, ist es manchmal besser, Daten einer großen Tabelle in Stücken einzufügen:
INSERT INTO newtable SELECT * FROM oldtable WHERE yourkey > something AND yourkey <= somethingelse;
Wenn alle Datensätze eingefügt wurden, können Sie die Tabellen umbenennen.
Während der Konvertierung großer Tabellen sollten Sie den
InnoDB
-Bufferpool vergrößern, damit weniger
Plattenzugriffe erforderlich sind. Reservieren Sie jedoch nicht
mehr als 80% des physikalischen Arbeitsspeichers. Sie können
auch die InnoDB
-Logdateien vergrößern.
Achten Sie darauf, dass der Tablespace nicht vollläuft:
InnoDB
-Tabellen brauchen auf der Festplatte
viel mehr Speicherplatz als MyISAM
-Tabellen.
Wenn einer ALTER TABLE
-Operation der Platz
ausgeht, startet sie ein Rollback, und das kann Stunden dauern,
wenn es an die Festplatte gebunden ist. Bei Inserts nutzt
InnoDB
den Insert-Puffer, um
Sekundärindexeinträge in Batches mit dem Index
zusammenzuführen. Das spart viele Schreiboperationen auf der
Festplatte. Da für den Rollback kein solcher Mechanismus
existiert, kann dieser 30-mal länger als die
Einfügeoperationen dauern.
Wenn ein Rollback-Prozess außer Kontrolle gerät und Sie keine
wertvollen Daten in Ihrer Datenbank haben, ist es manchmal
ratsam, den Datenbankprozess anzuhalten, anstatt Millionen von
Lese/Schreiboperationen auf der Festplatte abzuwarten. Den
gesamten Vorgang können Sie unter
Abschnitt 14.2.8.1, „Erzwingen einer InnoDB
-Wiederherstellung (Recovery)“ nachlesen.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.