MySQL: InnoDB-Engine deaktivieren

Gerade auf Servern mit wenig freiem RAM-Speicher (etwa bei günstigeren virtuellen Servern, die oft weniger als 512MB Speicher zur Verfügung haben) muss man teilweise wirklich auf jedes Megabyte Speicherverbrauch achten.

In einer Standard-Hosting-Umgebung unter Linux, bestehend aus Webserver, PHP und MySQL-Datenbanken ist neben dem Webserver MySQL der größte Speicherfresser. Standardmäßig wird in MySQL 5.x die Datenbank-Engine “InnoDB” verwendet. Neben InnoDB gibt es auch noch die Datenbank-Engine “MyISAM“. Auf die genauen Details oder Besonderheiten der beiden Engines möchte ich an dieser Stelle nicht weiter eingehen, dies würde den Rahmen dieses Artikels sprengen. Beide Engines eignen sich gleichermaßen für alle gängigen CMS, die Unterschiede spürt man erst dann, wenn es etwa daran geht, einen MySQL-Server zwecks Lastverteilung auf mehrere physikalische Server “aufzuteilen” oder wenn der Datenbankserver permanent unter hoher Last steht.

Ein Vorteil von MyISAM ist jedoch der viel geringere Arbeitsspeicher-Bedarf im Vergleich zu InnoDB. So braucht InnoDB laut verschiedener Quellen zwischen 3 und 5-Mal so viel RAM-Speicher wie MyISAM. Deshalb ist MyISAM vor allem auf Systemen mit geringem RAM-Angebot ein “muss”, InnoDB lässt sich damit nicht sinnvoll betreiben. Um die InnoDB-Engine zu deaktivieren, muss ein Eintrag in die MySQL-Konfigurationsdatei gesetzt werden. Die MySQL-Konfigurationsdatei befindet sich auf Debian-basierten Systemen unter /etc/mysql/my.cnf.

Viele ältere Tutorials im Netz empfehlen hier, den Eintrag “skip-innodb” in die Konfigurationsdatei einzutragen. Dieser Parameter wird unter neueren MySQL-Versionen (>5.2) nicht mehr unterstützt und führt dazu, dass der MySQL-Server nicht mehr gestartet werden kann. Dies geschieht auch bei einem Upgrade einer älteren MySQL-Version auf eine aktuelle, bei der auf die “alte” Methode die InnoDB-Engine abgeschaltet wurde.

Um InnoDB auf aktuellen MySQL-Servern zu deaktivieren, sind zwei Einträge in der my.cnf nötig:

ignore_builtin_innodb
default_storage_engine=MyISAM

Die erste Zeile deaktiviert die InnoDB-Engine, die zweite Zeile definiert, dass MyISAM zukünftig bei allen Datenbanken verwendet werden soll. Wichtig: Beim deaktivieren von InnoDB muss darauf geachtet werden, dass natürlich keine InnoDB-Datenbanken verwendet werden, denn InnoDB und MyISAM sind nur bedingt kompatibel und müssen extra konvertiert werden!

Bei einer Standard-Konfiguration des MySQL-Servers ohne weitere Konfiguration sank im Test der Speicherverbrauch von ca. 180MB im Leerlauf auf ca. 60MB, also um zwei Drittel! Eine Anleitung, wie MyISAM-DBs zu InnoDB und umgekehrt konvertiert werden, folgt demnächst!

Viele Grüße
Horrorkid

Kommentar schreiben

2 Kommentare.

  1. Hast schon recht, InnoDB verbraucht etwa 5x mehr Speicherplatz und auch mehr Arbeitsspeicher. Für kleinere Projekte empfielt sich ein Umstieg zu MyISAM - besonders wenn man auf eine besonders ressourcenschonende Konfiguration achten muss.

    Ansonsten besitzt InnoDB im professionellen Bereich eine eindeutige Stärke. Eine wunderbare Übersicht findet man in dieser PDF: http://www.oszone.co.kr/sites/default/files/Wp_MySQL-5.5_InnoDB-MyISAM.en_.pdf

    Hier ist übrigens noch ein kleiner Benchmark: http://blog.kapsobor.de/archives/2006/09/18/myisam_vs_innodb/

    • Danke für dein Kommentar und für die verlinkten Infos. Vielleicht bastel ich da demnächst noch einen eigenen Artikel daraus, muss mich da aber erst in die Materie einarbeiten. Will ja kein Halbwissen verbreiten :)

Kommentar schreiben


Hinweis - Du kannst dies benutzenHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>