Langsame MySQL-Abfragen gehören zu den häufigsten Flaschenhälsen in Webanwendungen – und sind oft unnötig. Wer weiß, wo man suchen muss, findet das langsame Query in Minuten statt Stunden.

Slow Query Log standardmäßig: deaktiviert (slow_query_log=0) · Standard long_query_time: 10 Sekunden · MySQL EXPLAIN Funktion: zeigt Ausführungsplan · Performance Schema verfügbar: ab MySQL 5.6 · Empfohlene long_query_time: 1-2 Sekunden für Produktion

Kurzüberblick

1Bestätigte Fakten
2Was unklar ist
  • Hardware-Ursachen variieren je nach Serverumgebung
  • Analyse-Aufwand abhängig von MySQL-Version und Workload
3Zeitleisten-Signal
  • Performance Schema nutzbar ab MySQL 5.6
  • pt-query-digest für umfangreiche Log-Analyse verfügbar
4Wie es weitergeht
  • Monitoring-Tools wie PMM für kontinuierliche Analyse
  • Regelmäßige Index-Prüfungen zur Vorbeugung
Quelle Wert
Offizielle MySQL-Doku dev.mysql.com/doc/en/slow-query-log.html
Empfohlene long_query_time 1-2 Sekunden für Produktion
EXPLAIN Typen ANALYZE, FORMAT=JSON

Wie beschleunigt man MySQL-Abfragen?

Die Beschleunigung von MySQL-Abfragen beginnt mit dem Erkennen der Flaschenhälse. Fehlende Indizes auf WHERE-, ORDER BY- und JOIN-Spalten verursachen langsame Abfragen – ein klassisches Problem, das sich gezielt beheben lässt (PC-Erfahrung – Index-Grundlagen).

Index-Optimierung

  • Indizes auf alle Spalten setzen, die in WHERE-Klauseln verwendet werden
  • Handler_read_rnd_next hoch im phpMyAdmin-Status deutet auf fehlende Indizes hin (PC-Erfahrung – Status-Analyse)
  • Ein Index auf die Spalte ‘newsletter’ reduzierte die Abfragezeit von 0,08 auf 0,003 Sekunden (PC-Erfahrung – Performance-Benchmarks)

Query-Umstrukturierung

  • Pattern Matching mit führenden Wildcards vermeiden (LIKE ‘%term%’)
  • EXPLAIN nutzen, um Full Table Scans zu verhindern
  • JOINs über indizierte Spalten bevorzugen
Fazit: Eine einzige fehlende Index-Spalte kann Query-Zeiten um den Faktor 20 reduzieren – Index-Optimierung liefert die größten Geschwindigkeitsgewinne.

Wie aktiviert man das Slow Query Log in MySQL?

Das Slow Query Log ist das wichtigste Werkzeug zur Identifikation langsamer Abfragen. Es zeichnet alle Queries auf, die länger als der eingestellte Schwellenwert dauern. Standardmäßig ist es deaktiviert, lässt sich aber mit wenigen Befehlen aktivieren.

Konfiguration setzen

Mit dem folgenden Befehl wird das Slow Query Log aktiviert: SET GLOBAL slow_query_log = 'ON'; (Ikoula Wiki – Slow Query Log aktivieren)

long_query_time anpassen

Der Standard-Wert von 10 Sekunden ist zu hoch für die meisten Produktivumgebungen. Empfohlen wird ein Wert von 1-2 Sekunden, um auch mittlere Verzögerungen zu erfassen. Wer mehr Detail möchte, setzt den Wert niedriger – sollte aber beachten, dass niedrigere Werte auch mehr Log-Daten erzeugen (Ikoula Wiki – Schwellenwerte einstellen).

Der Trade-off

Niedrigere long_query_time-Werte erfassen mehr Queries, erzeugen aber größere Log-Dateien. Für Produktionsserver empfiehlt sich ein Balance-Akt: 1-2 Sekunden reichen für die meisten Workloads.

Die Konfiguration lässt sich dauerhaft in der MySQL-Konfigurationsdatei sichern: slow_query_log = 1 und slow_query_log_file = /var/log/mysql/slow-query.log. Der große Vorteil dieser Methode ist die Persistenz über Neustarts hinweg – bei Verwendung von SET GLOBAL gehen die Einstellungen nach einem MySQL-Restart verloren.

Wie analysiert man das Slow Query Log?

Ein aktives Log ist nur der erste Schritt – dann müssen die Daten ausgewertet werden. SHOW PROCESSLIST zeigt laufende Prozesse und deren Dauer in Echtzeit (Adobe Experience League – Prozess-Analyse).

Log-Inhalte prüfen

Mit grep lassen sich gezielt langsame Queries filtern: grep 'Query_time: [5-9][0-9]|Query_time: [0-9][0-9][0-9]' /var/log/mysql/mysql-slow.log -A 3 (Adobe Experience League – Log-Filterung)

Tools wie pt-query-digest

Das Percona Toolkit enthält pt-query-digest zur umfangreichen Analyse von Slow Query Logs. Dieses Tool gruppiert ähnliche Queries, zeigt deren Häufigkeit und durchschnittliche Ausführungszeit an (Adobe Experience League – Log-Analyse-Tools).

Warum das wichtig ist

Dieselbe langsame Query kann tausendfach pro Stunde ausgeführt werden. pt-query-digest zeigt: Ist es eine einzige Query oder eine Million? Die Priorisierung wird dadurch erheblich einfacher.

Das Pattern zeigt sich deutlich: Eine Query, die 0,5 Sekunden dauert, aber 10.000 Mal pro Stunde ausgeführt wird, verursacht mehr Schaden als eine 5-Sekunden-Query, die einmal täglich läuft.

Wie verwendet man MySQL EXPLAIN?

EXPLAIN ist das Diagnosewerkzeug direkt in MySQL – es zeigt den Ausführungsplan einer Abfrage und enthüllt, welche Indizes genutzt werden und wo Full Table Scans drohen (PC-Erfahrung – EXPLAIN-Grundlagen).

Befehl ausführen

Einfach EXPLAIN vor die Query setzen: EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

Ausgabe interpretieren

  • type: ALL bedeutet Full Table Scan – hier besteht Optimierungsbedarf
  • key: zeigt den verwendeten Index
  • rows: geschätzte Anzahl der zu prüfenden Zeilen
  • Extra: Informationen zu Using filesort, Using index

Index-Probleme beheben

Ungenutzte Indizes erkennt man daran, dass der EXPLAIN-Plan keinen Zugriff über den erwarteten Index zeigt. Fehlende Indizes lassen sich mit CREATE INDEX idx_spalte ON tabelle (spalte); hinzufügen.

Der Upshot

EXPLAIN ist in Sekunden ausgeführt und liefert sofort verwertbare Hinweise. Jede Abfrage vor dem Deployment mit EXPLAIN zu prüfen, sollte zur Standard-Praxis gehören.

Wer EXPLAIN regelmäßig einsetzt, erkennt schnell das Muster: type=’ALL’ taucht bei unindizierten Spalten auf, und der Optimizer greift zum Full Table Scan. Je größer die Tabelle, desto fataler dieser Zugriffspfad.

Wie prüft man langsame Abfragen mit Performance Schema?

Das Performance Schema, verfügbar ab MySQL 5.6, bietet tiefe Einblicke in die Abfrageausführung auf Serverebene. Es ermöglicht das Tracing von Events und die Identifikation von Bottlenecks ohne manuelle Log-Analyse (Adobe Experience League – Performance Schema).

Schema aktivieren

Performance Schema ist standardmäßig aktiviert, kann aber bei Bedarf mit UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'; konfiguriert werden.

Events_statements_summary nutzen

Die Tabelle events_statements_summary_by_digest aggregiert Informationen zu Abfragen nach ihrem Digest. Hier finden sich Metriken wie COUNT_STAR, SUM_TIMER_WAIT und AVG_TIMER_WAIT.

Top-Queries filtern

Mit einer Abfrage wie SELECT DIGEST, SUM_TIMER_WAIT/1000000000000 AS dur FROM performance_schema.events_statements_summary_by_digest ORDER BY SUM_TIMER_WAIT DESC LIMIT 10; lassen sich die langsamsten Queries direkt identifizieren.

Was zu beachten ist

Performance Schema hat einen geringen Overhead, aber bei sehr hoher Query-Frequenz kann die Datensammlung merklich Speicher beanspruchen. Regelmäßige Bereinigung mit RESET PERFORMANCE_SCHEMA ist empfehlenswert.

Die Praxis zeigt: In Umgebungen mit mehr als 10.000 Queries pro Sekunde lohnt sich die regelmäßige Bereinigung, da die Aggregationsdaten sonst den verfügbaren Speicher füllen.

Weitere Optimierungsschritte

Fragmentierte Tabellen behandeln

Fragmentierte Tabellen verlangsamen MySQL-Berechnungen. Mit einem Query auf information_schema.TABLES lassen sich fragmentierte Tabellen identifizieren: SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.TABLES WHERE Data_free > 0; (Timme Hosting – Tabellen-Fragmentierung)

Die Lösung: OPTIMIZE TABLE datenbank.tabelle; reorganisiert die Tabelle und gibt Speicher frei (Timme Hosting – OPTIMIZE TABLE).

Der messbare Effekt: OPTIMIZE TABLE komprimiert die Tabellenstruktur und reduziert die physische Größe – besonders nach massiven DELETE- oder UPDATE-Operationen.

Monitoring-Tools einsetzen

Percona Monitoring and Management (PMM) bietet ein Dashboard zur kontinuierlichen Überwachung von Slow Queries und Performance-Metriken. Für Teams ohne PMM-Setup bleiben SHOW PROCESSLIST und die direkte Log-Analyse die praktikabelsten Optionen.

Bestätigte Maßnahmen

  • Slow Query Log mit slow_query_log=1 aktivieren
  • EXPLAIN zur Plan-Analyse verwenden
  • Indizes auf WHERE/JOIN-Spalten setzen
  • pt-query-digest für umfangreiche Logs

Unklare Aspekte

  • Hardware-Einfluss je nach Serverumgebung unterschiedlich
  • Analyse-Aufwand variiert mit MySQL-Version

Setzen Sie slow_query_log auf 1, um das Slow Query Log zu aktivieren. Dies ermöglicht die systematische Erfassung aller Abfragen, die den Schwellenwert überschreiten.

— MySQL-Dokumentation (Offizielle Referenz)

Identifizieren Sie Engpässe mit PMM oder manuell über das Slow Query Log – beides liefert die Daten, die Sie zur Optimierung benötigen.

— Percona Blog (MySQL-Performance-Experten)

Die Werkzeuge sind vorhanden, der Aufwand überschaubar. Wer das Slow Query Log aktiviert, EXPLAIN regelmäßig nutzt und fragmentierte Tabellen im Blick behält, eliminiert die häufigsten Ursachen für langsame MySQL-Abfragen systematisch.

Verwandte Beiträge: Autoakku Testen – Zuverlässiger Heimtest mit Multimeter · Angesprungene Fliese Reparieren – Einfache Schritt-für-Schritt-Anleitung

Häufig gestellte Fragen

Was verursacht langsame MySQL-Abfragen?

Die häufigsten Ursachen sind fehlende Indizes auf WHERE-, ORDER BY- und JOIN-Spalten, Full Table Scans durch ineffiziente Query-Strukturen und fragmentierte Tabellen. Auch unzureichende Hardware-Ressourcen können eine Rolle spielen.

Braucht man Admin-Rechte für Slow Query Log?

Ja, das Setzen der globalen Variablen wie slow_query_log erfordert SUPER- oder PROCESS-Admin-Rechte. Für die reine Abfrage der Log-Datei reichen in der Regel normale Benutzerrechte.

Wie oft sollte man Queries mit EXPLAIN prüfen?

Am besten vor jedem Deployment neuer Queries oder nach Änderungen am Datenbankschema. In Produktionsumgebungen empfiehlt sich eine regelmäßige Prüfung der Top-Queries aus dem Slow Query Log.

Funktioniert Performance Schema in allen MySQL-Versionen?

Performance Schema ist ab MySQL 5.6 verfügbar und in neueren Versionen (5.7, 8.x) erheblich erweitert. Ältere Versionen vor 5.6 müssen auf das Slow Query Log und SHOW STATUS angewiesen bleiben.

Welche Hardware beeinflusst Query-Geschwindigkeit?

RAM für den Buffer Pool, CPU für komplexe JOINs und insbesondere die Festplattenleistung (SSD vs. HDD) beeinflussen die Query-Geschwindigkeit erheblich. Langsame I/O ist oft ein Flaschenhals bei Abfragen, die große Datenmengen lesen.

Kann man Slow Log remote analysieren?

Ja, mit Tools wie pt-query-digest oder über Monitoring-Plattformen wie PMM lassen sich Slow Query Logs auch remote analysieren. Die Log-Datei kann von entfernten Servern kopiert und ausgewertet werden.

Was tun bei Full Table Scans?

Full Table Scans erkennt man in EXPLAIN am type=’ALL’. Die Lösung ist meist ein fehlender Index oder eine Umstrukturierung der Query, sodass der Optimizer einen Index nutzen kann. Manchmal hilft auch ein Rewrite mit EXISTS statt IN.