Über den Author / Internet / WordPress MySQL Performance

WordPress MySQL Performance

~2 Min. Lesezeit

Im WordCamp habe ich diverse Diskussionsrunden besucht, worunter auch blogWERK anwesend war. Es wurde erwähnt das blogWERK die Datenbanken welche standardmässig per MyISAM betrieben werden auf InnoDB umstellen und dadurch eine bessere Performance und weniger CPU Zeit erhalten.

Dies widerspricht grundsätzlich dem InnoDB und MyISAM Datengerüst, bin jedoch der Letzte, welcher dies nicht testen würde. Aus diesem Grund habe ich ein kleines PHP Script geschrieben, welches die komplette WordPress Datenbank automatisch mutiert:

<?php

include("wp-config.php");

$db = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysql_select_db(DB_NAME, $db);

$tables_result=mysql_query("SHOW TABLE STATUS LIKE 'blog_posts'", $db);
if (mysql_result($tables_result,0,"Engine") == "MyISAM")
{
	$von = "MyISAM";  $to = "InnoDB";
}
else { $von = "InnoDB";  $to = "MyISAM"; }

$tables_result=mysql_query("SHOW TABLES", $db);
while($tables=mysql_fetch_array($tables_result))
{
	mysql_query("ALTER TABLE `".$tables[0]."` Engine=".$to, $db);
	echo mysql_error();
	echo "Table `".$tables[0]."` has been changed from ".$von." to ".$to."<br/>";
}

echo "Script is finished. Please delete this file now.";
	
?>

Das Script kopiert man ins Hauptverzeichnis des Blog und ruft dieses auf. Je nach Bloggrösse kann das Script ein paar Minuten dauern. Bei einem Aufruf wird von MyISAM zu InnoDB geändert, beim nächsten Aufruf zurück von InnoDB auf MyISAM, so könnt ihr auch wieder problemlos zurück wechseln. Dennoch sollte immer ein Backup bei solchen Tests angelegt werden oder zumindest vorher auf einer Testinstallation vorgenommen werden.

Es gibt leider diverse Plugins, welche die Datenbanken erweitern. Wie zum Beispiel „Yet Another Related Posts“ welches innerhalb der wp_posts Tabelle neue Fehler mit fulltext Indexes anlegt. Bei diesen Tabellen muss man zuerst diesen Index entfernen. Im Fall des oben genannten Plugins mit:

ALTER TABLE `wp_posts`
DROP INDEX `yarpp_title`,
DROP INDEX `yarpp_content`;

Dies muss manuell angepasst werden, da ich mit meinem Script nicht alle Plugins abdecken kann. Bei Fragen einfach den Kommentarbereich nutzen.

Edit 09.05.2011:
Ich hatte nun ein Testserver installiert und mit 10 parallelen Bots (je 2 Min Verzögerung beim Start, welcher nacheinander 5 Seiten öffnet im 5 Sekunden Rhythmus. Für die Seite wurden alle Cachingfunktionen deaktiviert!

Meine Messungen haben ergeben das bei der InnoDB die CPU Kurve sich sehr stabil bei 70-80% eingependelt hatte. Durchschnittliche Abarbeitungszeit rund 1 Sekunde.
die gleichen Messungen bei MyISAM haben einen instabileren Zustand gezeigt. Die CPU schwankte von 30%-100% und die durchschnittliche Abarbeitungszeit von 0.8 – 1,6 Sekunden.

Auch wenn die InnoDB die stabileren Resultate zeigt, müsste ich definitiv ein grösseren Server und mehr Stressbots nehmen zum testen, um stabilere Resultate zu erhalten um dann eine Aussage zu treffen.

About Stefan

avatar
Ein männlicher IT Nerd, durchstöbert das Web nach speziellen Gadgets, unentbehrlicher Software und Alles was man im IT Sektor nicht verpassen darf. Immer hilfsbereit wenn Probleme zu lösen sind oder das Unmögliche umgesetzt werden sollte.

Weitere interessante Artikel

Meine WordPress .htaccess Datei

~0 Min. LesezeitDie .htaccess Datei beinhaltet viele Serveranweisungen, welche ich gerne hier mit Euch Share …

PHP Trojaner – Wettbewerb

~2 Min. LesezeitIn der Serie der PHP Trojaner gibt es noch viele weitere Möglichkeiten zum …

3 Kommentare

  1. avatar

    „Ich installiere Morgen auf einem Testserver eine WordPress Instanz und werde ein kleinen Stresstest darauf laufen lassen um eine genaue Aussage bezüglich der Änderung zu treffen.“

    -> super, dann werde ich demnach warten, bis morgen, bzw. übermorgen, dann brauch ich mir die Arbeit nicht zu machen 🙂 bin gespannt und freu mich dann auf deinen ausfühlichen Bericht!

  2. avatar

    ich habe dahingehend auch einige Tests hinter mir/uns – und die Ergebnisse sind anders als in der Session. Allerdings setzen wir viel auf APC, Memcache und iva Zugriff mit dem Plugin W3Total Cache. Ich bin gespannt auf deine Werte! Schade dass wieder so wenig Zeit vor Ort war.

  3. avatar

    Ich setze auch auf Memcached mit W3 Total Cache, aber um die Änderung bezüglich Datenbank zu testen wird dies selbstverständlich deaktiviert.

    Installiere gerade das Testszenario und lass dann auf die WP Installation 20 Testuser die ein vorgegebenes Szenario in versetzen Abständen von 2 Minuten durchspielen.
    Dann schau ich mir die Lastkurfe (CPU und i/O) von der MySQL Datenbank an.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

eMail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.