Da meine WordPress-Installation mit dem Standard-Template bei dem Webhoster Strato ziemlich langsam war und ich Ladezeiten von 5-6 Sekunen pro Seitenaufruf hatte, musste ich mich auf die Suche nach der Quelle des Performance-Engpasses machen.

Langw Ladezeiten können verschiedene Ursachen haben:

  1. Webserver ist überlastet und liefert Daten zu langsam aus
  2. Webserver ist überlastet und verarbeitet Daten zu langsam
  3. Datenbankserver ist überlastet und verarbeitet Daten zu langsam

Punkt 1 kann man einfach durch einen Dateidownload testen, ist dieser wesentlich kleiner als die möglich Bandbreite der eigenen DSL-Leitung, ist der Server wohl allgemein überlastet. Weiters kann nach Punkt 2 im Falle eine Scriptsprache, das entsprechende Modul ausgelastet sein. Bei WordPress wäre das die PHP-Verarbeitung auf dem Webserver. Bei einem Hosting bei Strato gibt es einen separaten Server für die Datenbank MySQL, diese kann nach Punkt 3 auch überlastet sein. Wo der Hund vergraben liegt, kann nun genauer getestet werden.

MySQL Benchmark Script

Hier habe ich bei einer Suche nach  „mysql speed test“ oder „mysql benchmark script“ nicht viel brauchbares gefunden, was sich direkt von PHP aus starten lässt. Also habe ich was kleines selbstgebastelt, was auf einer MySQL-Benchmark-Funktion beruht. Meine Ergebnisse:

  • 5,8 s lokal mit XAMPP
  • 1,0 s Dedicated Webserver
  • 0,2 s Strato BasicWeb XL Webspace

Wie hier klar zu sehen ist, ist der MySQL Server in XAMPP standardmäßig wohl sehr schlecht konfiguriert. Der MySQL-Server rdbms.strato.de von Strato liefert sehr gute Ergebnisse, was zeigt, dass die langen Ladezeiten bei Strato nicht mit dem Datenbankserver zusammenhängen.

PHP Code für MySQL Benchmark Script

Vorher die MySQL Table nach dem Code in den Kommentaren anlegen und die MySQL Verbindungsdaten in das Script eintragen, als PHP File dann vom Webserver starten.


/*
PHP Script to benchmark a MySQL-Server
(c) www.webdesign-informatik.deSQL Code for Testtable:CREATE TABLE IF NOT EXISTS `mytable` (
`mycol` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `mytable` (`mycol`) VALUES (23);

*/
$db_server = 'localhost';
$db_user = 'root';
$db_pw = '';
$db_name = 'test';$timeStart = microtime_float();
$link = mysql_connect($db_server, $db_user, $db_pw);
mysql_select_db($db_name, $link);

$query = "SELECT BENCHMARK(1000000,ENCODE('hello','goodbye'));";
$result = mysql_query($query, $link);
$query = 'BENCHMARK(10000, (SELECT * FROM mytable)';
$result = mysql_query($query, $link);

$timeEnd = microtime_float();
echo "Time: ".($timeEnd - $timeStart)." s";
mysql_close($link);

function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}

PHP Benchmarking Script

Um die Ladezeiten von PHP aus einem Host zu messen, habe ich ein PHP Benchmark Script gefunden, was gute Dienste erwies. Es führt einige Mathematik- und Stringberechnungen druch. Hier meine Ergebnisse als grobe Vergleichsgrundlage, entscheidend für die Performance ist natürlich die eigene Hardware und Konfiguratio.

  • 70 ms lokal mit XAMPP
  • 80 ms Dedicated Webserver
  • 515 ms Strato BasicWeb XL Webspace
  • 31 ms Strato BasicWeb XL nach internem Webspace Umzug

Ja, richtig gelesen, nach dem Betätigen der unscheinbaren Funktion „Webspace auf schnelleren Server umziehen“, die mir nur durch Zufall im Loginbereich aufgefallen ist,  habe ich einen Super Speed bei Strato, wahrscheinlich weil ich mir die Ressourcen noch nicht mit Millionen anderen Usern teilen muss. Mal schauen wie lange das so bleibt. So ist es jedenfall akzeptabel! WordPress-Seitenaufruf in ~2 Sekunden, was nur noch an der langsamen WordPress-Programmierung liegt.

PHP Benchmark Script ergebnis

Ergebis des PHP Benchmarking Scripts auf dem lokalen Rechner

Sonntag, 24. Oktober 2010 [PHP] RSS 2.0 / Trackback senden

2 Kommentare

  1. Gabriel

    Mittwoch, 16. November 2011 um 11:49

    Vielen Dank für die Tipps! Haben mir sehr geholfen.

  2. alrik

    Montag, 26. Dezember 2011 um 07:48

    Das Problem ist nicht XAMPP sondern Windows !
    Ein Test auf meinem Pc ergab für Windows mit XAMPP 6,2 sec für dein Script und ein vServer mit Linux auf dem selben Rechner mit nur 1 (statt 4) Kernen und nur 1Gb Ram (statt 12Gb) lag bei 0,177 sec. Unter Linux kam das baugleiche (oder?) LAMP zum Einsatz. Ausschlaggebend für die Geschwindigkei bei MySQL scheint die Performance des ersten Kerns zu sein.

Einen Kommentar hinterlassen

XHTML allowed tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>