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

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

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!

Ähnliche Beiträge

Openark-Kit – coole Tools für MySQL Shlomi Noach hat eine interessante Tool-Sammlung für MySQL veröffentlicht. Das Ganze funktioniert über die Shell und setzt Python voraus. Die Tools si...
MySQL – Optimale Größe für Feldtypen Was ich wirklich und mit aller Leidenschaft hasse, sind Programmierer die im Fire&Forget-Stil Größen von Feldtypen in MySQL setzen - und dann auch...
DBeaver – freier Datenbank-Manager Datenbanken sind in der Regel groß und mächtig, und selten möchte man diese über die Kommandozeile verwalten. Die wohl gleichsam schlimmste und am wei...
PouchDB – CouchDB mit Javascript Ich habe ja schon desöfteren verkündet, das man nicht alles mit MySQL todschlagen muss. Zum einen gibt es sinnvolle Key-Value-Stores, zum anderen Date...

5 Antworten auf „Optimierung von Webseiten mit dem Jet Profiler“

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

Schreibe einen Kommentar

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