Wann muss von MyISAM zu InnoDB gewechselt werden?

7

Wir haben einen MySQL 5.0-Server, auf dem alle Tabellen als MyISAM ausgeführt werden. Wir haben zwei Slaves, die wir im letzten Monat auf MySQL 5.5 aktualisiert haben. Ihre Tabellen sind auch immer noch MyISAM.

Mein ursprünglicher Plan war es, den 5.0-Master auf 5.5 zu aktualisieren und dann in InnoDB zu konvertieren. Jetzt frage ich mich, ob es sinnvoller wäre, vor dem Upgrade zu beginnen. Ich war vorsichtig, seit ich gehört habe, dass InnoDB unter 5.5 viel schneller ist als InnoDB unter 5.0. Ist das unbegründet und soll ich jetzt anfangen?

Andrew
quelle

Antworten:

9

Wenn Sie gleichzeitig schwere UPDATEs und INSERTs benötigen, benötigen Sie InnoDB

Wenn Sie eine Deadlock-Auflösung benötigen, benötigen Sie InnoDB

Wenn Sie eine Speicher-Engine benötigen, die sowohl Daten als auch Indizes zwischenspeichert, benötigen Sie InnoDB

Wenn Sie effektiv auf mehrere CPUs zugreifen möchten , benötigen Sie InnoDB ( und optimieren dies ).

Bitte beziehen Sie sich auf meine früheren Artikel auf InnoDB:

Sie sagten, Sie hätten gehört, dass MySQL 5.5 schneller als MySQL 5.0 ist. Out of the Box, das stimmt nicht. Sie müssen MySQL 5.5 abstimmen, um eine hervorragende Leistung zu erzielen !!! Hier sind meine früheren Artikel zu diesem Thema:

Sie haben erwähnt, dass MyISAM schneller als InnoDB ist. Wenn das MyISAM viele breite VARCHAR-Spalten mit dem Standardwert ROW_FORMAT = Dynamic (Standard) enthält, kann dies die MyISAM-Leistung beeinträchtigen. Die Aussage, dass eine Speicher-Engine schneller als die andere ist, hängt von der Anwendung, dem Lese- / Schreib-E / A-Verhältnis und der Optimierung der Speicher-Engine ab.

Siehe meine Beiträge zu diesem Thema

Behebung Ihres Problems, ob Sie jetzt oder später zu InnoDB konvertieren möchten:

Im fünften Link, den ich bereitgestellt habe ( welcher zuerst: Upgrade der MySQL-Version oder Konvertierung der Speicher-Engine? ), Empfehle ich die Konvertierung zuerst. In Ihrem speziellen Fall würde ich jedoch empfehlen, später zu konvertieren. Der Grund ist einfach: Sie verschieben die Daten auf einen anderen Server. MyISAM-Tabellen sind sehr einfach zu portieren. Das Ausführen eines rsync oder scp von / var / lib / mysql ist zweckmäßiger (schneller) als das Konvertieren in InnoDB, da die Daten geringfügig (manchmal erheblich) groß sind, wenn sie als InnoDB vorhanden sind.

Es gibt zwei Dinge, die Sie tun müssen:

BRAUCHEN # 1

Wenn Sie rysnc / scp verwenden /var/lib/mysql, überschreiben Sie / var / lib / mysql / mysql. Daher schlage ich vor, dass Sie Ihre Daten folgendermaßen verschieben:

BRAUCHEN # 2

Sie benötigen ein einfaches Skript, um MyISAM in InnoDB zu konvertieren. Führen Sie auf dem MySQL 5.5 DB Server Folgendes aus:

echo "SET SQL_LOG_BIN = 0;" > /root/ConvertMyISAMToInnoDB.sql
MYSQL_CONN="-u... -p..."
mysql ${MYSQL_CONN} -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') InnoDBConversionSQL FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql','performance_schema') ORDER BY (data_length+index_length)" > /root/ConvertMyISAMToInnoDB.sql
less /root/ConvertMyISAMToInnoDB.sql

Wenn Sie mit dem Konvertierungsskript zufrieden sind, melden Sie sich unter MySQL 5.5 bei mysql an und führen Sie es aus

mysql> source /root/ConvertMyISAMToInnoDB.sql

Versuche es !!!

RolandoMySQLDBA
quelle
Vielen Dank, obwohl dies meine Frage nicht ganz beantwortet. Ich weiß, ich will InnoDB. Ich frage, ob es sinnvoll ist, auf 5.0 zu konvertieren, anstatt auf 5.5 zu warten, da MyISAM auf 5.0 vermutlich schneller als InnoDB ist.
Andrew