Open top menu

Optimierung von Webseiten mit dem Jet Profiler

Ich habe ja bereits vor einiger Zeit über den Jet Profiler berichtet, bei dem es sich um einen Profiler für MySQL handelt, der unter anderem Slow Queries aufspüren kann. Slow Queries sind solche Queries, die eine längere Ausführungszeit benötigen, als in der Config von MySQL als Maximalwert vorgegeben ist.

Bisher hatte ich noch nicht wirklich eine Einsatzmöglichkeit für das Tool, da man alles direkt per Debugging oder manuell lösen konnte. Aktuell stehe ich aber vor der Optimierung einer Webseite, bei der dies nicht ohne Weiteres möglich ist. Zum einen ist das Ganze ein gewachsenes CMS mit ziemlich viel Auswüchsen, zum anderen ist es eine Hochlast-Seite, die ich nicht mal eben mit Debugging-Ausgaben „verschönern“ kann. Aufgrund der nicht normalisierten Datenbank und einigen architektonischen Fehlern vermute ich derzeit, das MySQL indirekt an dem Problem schuld ist, da unter Umständen Joins über bis zu 15 Tables durchgeführt werden könnten.

Konfiguration der Zugangsdaten in Jet Profiler

Konfiguration der Zugangsdaten in Jet Profiler

Nur wie feststellen? Und genau hier kommt der Jet Profiler ins Spiel. Nachdem ich einen Remote Zugang zu MySQL eingerichtet habe (Webhoster sind ja manchmal schon etwas anstrengend) habe ich das Tool einfach auf die Datenbank angesetzt. Zumindest in der Theorie, in der Praxis hat erstmal gar nichts funktioniert, da Jet Profiler mehr Rechte wollte. Aber der wirklich nette Support von Jet Profiler war so nett „eben schnell“ die Version 1.07 herauszubringen die es auch erlaubt, bei Hostern die Datenbanken zu profilen (noch einmal danke dafür!).

Also schnell auf „record“ gedrückt und das ganze Mal eine Stunde laufen lassen. Der Vorteil von Jet Profiler ist, dass es nicht nur die langsamen Queries anzeigt, sondern auch direkt ausgibt, WIESO sie so langsam sind, also direkt Möglichkeiten zur Optimierung zur Verfügung stellt. In meinem Fall gab es die eine oder andere Query, die einiges an Bauchschmerzen bereitet:

Ergebnis der Jet Profiler Analyse

Ergebnis der Jet Profiler Analyse

Der Infografik entnimmt man zwei grundlegende Infos: a) Bei Tabellenlayout hat der Programmierer wohl nicht so viel wert auf das Anlegen von Indizes gelegt, zum Zweiten gibt es Queries die mittels Join diese nicht optimierten Tabellen verlinken. Jet Profiler meint zu diesem Thema, das die sogenannten „Full Table Scans“ (also das Einlesen und komplette Auswerten einer gesamten Tabelle, die über keine geeigneten Indizes verfügt) nicht über 20% liegen sollte. Wie man in obiger Grafik sieht, schafft die Seite fast konstant 100%! Ein Umstand, der sich auf schlechtes Datenbankdesign zurückführen lässt.

Das andere Problem ist, das die langsamste Query durch die Bank bei jedem Seitenaufruf gestartet wird, deshalb gibt es auch so viele nette rote Punkte und noch nettere Fähnchen. Wenn man sich das näher anguckt (und ihr könntet es sogar, wenn ich die wichtigen Daten nicht verwischt hätte:) merkt man schnell, dass dies komplett unnötig ist, da es nur manche Datensätze, aber nicht alle Datensätze betrifft.

Was tun sprach Zeus? In diesem Fall ist meine Hoffnung gewesen, dass ich einen dicken Fauxpas in der Datenbank finde, dummerweise scheint es aber so zu sein, das wir da nicht mit einem nicht performanten Table rechnen müssen, sondern mit einer durch die Bank schlecht designeten Datenbank.

In diesem Fall hilft nur: Fehler verbessern, Jet Profiler erneut anwerfen. Hier stellt sich die Frage nach der Wirtschaftlichkeit, aber auch hier liefert Jet Profiler ausreichend Kanonenfutter, um belegen zu können, wo der Hund begraben liegt. Wer also Langeweile hat und eine Hochlast-Seite betreuen darf, einfach mal die freie Version anwerfen, Jet Profiler ist ein spaßiges Unterfangen, das den Nebeneffekt hat, das man sehr viel über SQL und Datenbankdesign lernt!

Guido
Geschrieben von Guido

Guido Mühlwitz ist Freiberufler mit Schwerpunkt HTML5, Zend Framework 2 / Node.js und individueller WordPress Plugin Entwicklung. Wenn er sich nicht gerade bei Twitter über PHP aufregt, bloggt er über aktuelle Themen aus dem Bereich der Anwendungsentwicklung.

5 Antworten auf Kommentar

  1. Avatar
    Dezember 09, 2009

    Achso danke. Das ist bei mir falsch angekommen ;)

    Antwort

  2. Avatar
    Dezember 09, 2009

    Du musst nichts auf dem Server installieren, aber du brauchst Remote Zugriff auf die MySQL-Datenbank. Jet Profiler ist eine Desktop-Anwendung.

    Antwort

  3. Avatar
    Dezember 08, 2009

    Habe ich das richtig verstanden – man muss also Remote Zugriff zum Server besitzen und entsprechende Berechtigungen zum installieren des MySQL Moduls haben?

    Danke!

    Antwort

  4. Avatar
    November 13, 2009

    Guter Bericht kann ich sicher mal brauchen, dieser Jetprofiler sieht echt gut aus!

    — thanks for the post!

    —–stooni

    Antwort

Leave a comment