Profiler und Prozessliste
Zwei Werkzeuge für die Frage „warum ist das langsam?" — eines schaut auf die Abfrage, das andere auf den Server.
Abfrage-Profiler
Klicken Sie Profiler in der Werkzeugleiste. Ist ein SQL-Editor-Tab aktiv, wird dessen Abfrage übernommen — sonst wählen Sie Verbindung und Datenbank und fügen eine ein. NabuSQL führt EXPLAIN (ANALYZE) FORMAT=JSON aus und zeichnet den Plan als Baum.
Jeder Knoten zeigt die Tabelle, die er anfasst, und seine Kosten; die Knoten sind gegen den teuersten gewichtet — der Teil der Abfrage, der den Schaden anrichtet, ist also optisch offensichtlich statt in einer Zahlentabelle vergraben. Angehängte Bedingungen stehen an dem Knoten, für den sie gelten.
Gebaut um das Planformat von MySQL
Der Profiler wertet die Ausgabe von MySQLs EXPLAIN FORMAT=JSON aus. Auf MySQL und MariaDB bekommen Sie den vollständigen Baum. Andere Systeme liefern eine andere Planform — nutzen Sie dort F6 (Explain) im SQL-Editor, der zeigt, was der Server zurückgibt.
Einen Plan lesen
Worauf zu achten ist:
- Ein vollständiger Tabellenscan über eine große Tabelle, wo Sie einen Indexzugriff erwartet hätten.
- Kosten, die sich auf einen Knoten konzentrieren — dort wird zuerst optimiert.
- Ein Index, der existiert, aber nicht genutzt wird, meist weil die
WHERE-Klausel die Spalte in eine Funktion packt oder sie mit einem anderen Typ vergleicht.
Nachdem Sie unter Tabellen und Spalten einen Index angelegt haben, lassen Sie den Profiler erneut laufen und bestätigen, dass sich der Plan tatsächlich geändert hat. Ein Index, den der Planer ignoriert, kostet Sie Schreibleistung und bringt nichts.
Prozessliste
Rechtsklick auf eine Datenbank und Process List zeigt, was der Server gerade tut: die verbundenen Sitzungen, die laufenden Abfragen und wie lange sie schon laufen.
Kill beendet eine Sitzung. Das ist das Werkzeug für die entlaufene Abfrage, die Sperren hält, während der Rest der Anwendung wartet.
Eine Sitzung zu beenden bedeutet ein Rollback
Eine unterbrochene Transaktion wird vom Server zurückgerollt, was bei einem langen Schreibvorgang so lange dauern kann wie die Anweisung selbst. Sehen Sie nach, was die Sitzung tut, bevor Sie sie beenden.
Eine praktische Reihenfolge
- Die Anwendung ist langsam → Prozessliste: blockiert eine Abfrage alles andere?
- Eine bestimmte Abfrage ist langsam → Profiler: wo liegen ihre Kosten?
- Korrektur — Index, umgeschriebenes
WHERE, andere Join-Reihenfolge. - Profiler erneut laufen lassen und bestätigen, dass der Plan sich geändert hat.
