2017-06-22 3 views
0

Ich möchte Engine von 2 Millionen Zeilen Tabelle von MyISAM zu InnoDB ändern. Ich habe Angst vor dieser langen Operation, also habe ich eine ähnliche Struktur InnoDB Tabelle erstellt und jetzt möchte ich alle Daten von alten zu diesem neuen kopieren. Was ist der schnellste Weg? WÄHLEN EINFÜGEN? Was ist mit START TRANSACTION? Bitte, helfen Sie. Ich möchte meinen Server nicht hängen.MySQL Change Engine große Millionen Zeilen Tabelle

+0

Planen Sie eine Ausfallzeit ein. – ajreal

Antwort

0

Tun Sie sich einen Gefallen: Kopieren Sie das gesamte Setup auf Ihren lokalen Computer und probieren Sie es aus. Sie werden eine viel bessere Vorstellung davon haben, worauf Sie sich einlassen. Beachten Sie mögliche Hardwareunterschiede zwischen Ihrem Produktionsserver und Ihrem lokalen Computer.

Der schnellste Weg ist wahrscheinlich der einfachste Weg:

INSERT INTO table2 SELECT * FROM table1; 
0

Ich vermute, dass Sie es nicht tun können, schneller als das, was in die ALTEN gebaut wird. Und es muss alle Daten kopieren und alle Indizes neu erstellen.

Achten Sie darauf, innodb_buffer_pool_size zur Vorbereitung auf InnoDB ausgelöst haben. Und niedriger key_buffer_size um Platz zu lassen. Schlagen Sie 35% bzw. 12% RAM für den Übergang vor. Nachdem alle Tabellen konvertiert sind, empfehlen wir 70% und nur 20 MB.

Eine leichte Beschleunigung ist, einige Auswahl, die die gesamte Tabelle und die gesamte PRIMARY KEY holt (wenn es zwischengespeichert werden kann). Dies wird einige I/O vor dem eigentlichen Start tun. Beispiel: SELECT avg(id) FROM tbl wobei ID der Primärschlüssel ist. Und SELECT avg(foo) FROM tbl wo Foo nicht indiziert ist, aber es numerisch ist. Dies wird einen vollständigen Scan des PK-Index und der Daten erzwingen, wodurch die Daten zwischengespeichert werden, die der ALTER lesen muss.

Weitere Tipps zum Konvertieren: http://mysql.rjweb.org/doc.php/myisam2innodb.

Verwandte Themen