Blog
monitoringUgur Demirel8. September 20268 Min. Lesezeit

Database Query Performance überwachen: Langsame Queries finden und beheben, bevor sie Ihre User treffen

Langsame Queries gehören zu den häufigsten Ursachen für Downtime und schlechte Performance — und bleiben unsichtbar, bis es jemand bemerkt. Erfahren Sie, welche Metriken zählen, mit welchem SQL Sie sie in PostgreSQL und MySQL aufdecken und wie Sie Ihre Datenbank rund um die Uhr überwachen.

Database Query Performance überwachen: Langsame Queries finden und beheben, bevor sie Ihre User treffen

Eine langsame Seite ist selten eine langsame Seite. Meistens ist es eine langsame Query. Ihre Anwendung kann gut designt, Ihr Cache warm und Ihr Frontend schnell sein — aber ein fehlender Index oder eine nicht optimierte Query kann aus einem 50-Millisekunden-Request einen 5-Sekunden-Timeout machen. Anders als ein harter Crash taucht eine langsame Query selten im Error Log auf. Sie verschlechtert die Erfahrung still, bis die User gehen.

Das Überwachen der Database Query Performance ist etwas anderes, als darauf zu achten, ob Ihre Datenbank erreichbar ist. Beides zählt, beantwortet aber unterschiedliche Fragen. Dieser Leitfaden zeigt die Metriken, die langsame Queries sichtbar machen, das konkrete SQL, um sie in PostgreSQL und MySQL zu finden, und wie Sie rund um die Uhr Wache halten.

Zwei verschiedene Fragen: Ist es erreichbar, und ist es schnell?

Database Monitoring teilt sich in zwei Ebenen. Availability Monitoring beantwortet eine einfache Frage: Kann Ihre Anwendung die Datenbank noch erreichen, und antwortet sie in angemessener Zeit? Query Performance Monitoring beantwortet eine schwierigere Frage: Welche Queries sind langsam, warum sind sie langsam und werden sie mit wachsendem Datenbestand schlimmer? Sie brauchen beides — eine Datenbank kann perfekt erreichbar sein, während eine einzige außer Kontrolle geratene Query Ihre Anwendung in die Knie zwingt.

Die Metriken, die wirklich zählen

Bevor Sie auf die Jagd nach langsamen Queries gehen, legen Sie fest, was Sie messen. Diese Zahlen trennen eine gesunde Datenbank von einer, die kurz vor einem Incident steht:

  • Query Latency — wie lange eine Query läuft, gemessen als p50, p95 und p99. Ein p50 von 10 ms mit einem p99 von 3 Sekunden bedeutet: Die meisten User sind zufrieden, aber einige warten.
  • Throughput (QPS) — Queries pro Sekunde. Ein plötzlicher Anstieg kann auf ein neues Feature oder einen lauten Nachbarn in geteilter Infrastruktur hindeuten.
  • Slow Query Rate — der Anteil der Queries über Ihrem Schwellwert (zum Beispiel 500 ms). Das ist die Zahl, die Sie zuerst alarmieren sollte.
  • Connection Pool Sättigung — wenn alle Verbindungen belegt sind, warten neue Requests. Hohe Wartezeit ist oft ein Symptom langsamer Queries, kein Mangel an Verbindungen.
  • Lock- und Deadlock-Ereignisse — eine einzige lang laufende Transaktion kann alles dahinter blockieren.

Langsame Queries in PostgreSQL finden

PostgreSQL hat ein Werkzeug, das den Großteil der Arbeit erledigt: die Erweiterung pg_stat_statements. Sie zeichnet für jede laufende Query aggregierte Statistiken auf, darunter Gesamtzeit, mittlere Zeit und Anzahl der Aufrufe. Einmal aktiviert, erhalten Sie eine dauerhafte Bestenliste Ihrer langsamsten Queries.

  • Erweiterung aktivieren: CREATE EXTENSION IF NOT EXISTS pg_stat_statements; ausführen, zu shared_preload_libraries hinzufügen und den Server neu starten.
  • Langsamste Queries nach mittlerer Zeit sortieren: SELECT query, calls, mean_exec_time, max_exec_time FROM pg_stat_statements ORDER BY mean_exec_time DESC LIMIT 10;
  • Mit EXPLAIN ANALYZE in eine einzelne Query zoomen. Sie führt die Query aus und zeigt den Plan, sodass Sie sehen, ob ein Index genutzt wird oder ein Full Table Scan läuft.
  • Achten Sie auf Seq Scan auf großen Tabellen, eine große Lücke zwischen geschätzten und tatsächlichen Zeilen und teure Sorts — die drei häufigsten Ursachen langsamer PostgreSQL-Queries.

Langsame Queries in MySQL finden

MySQL führt ein Slow Query Log, das Sie mit wenigen Einstellungen aktivieren können. Es erfasst jede Query, die länger als long_query_time läuft — der schnellste Weg, die schlimmsten Übeltäter zu finden, ohne ein Monitoring-Tool hinzuzufügen.

  • Aktivieren: SET GLOBAL slow_query_log = 1; SET GLOBAL long_query_time = 1; dann die Datei mit SHOW VARIABLES LIKE 'slow_query_log_file'; finden.
  • Plan mit EXPLAIN für jedes SELECT prüfen. Auf die Spalte type schauen — ALL bedeutet Full Table Scan, meistens das, was zu beheben ist.
  • Index-Abdeckung mit SHOW INDEX FROM your_table; prüfen und nach fehlenden oder ungenutzten Indexes suchen.
  • Threads_running und Threads_connected in SHOW STATUS beobachten; eine steigende Zahl laufender Threads bedeutet oft, dass langsame Queries Verbindungen offen halten.

Die Ursache beheben, nicht das Symptom

Eine langsame Query zu finden, ist nur die halbe Arbeit. Die Korrekturen fallen meist in einige bekannte Kategorien:

  • Fehlender Index — die häufigste Ursache. Ein Index auf Ihren WHERE- und JOIN-Spalten macht aus einem Full Scan oft wenige Millisekunden.
  • Das N+1-Problem — ein ORM, das pro Zeile eine Query statt einer für die ganze Menge ausführt. Suchen Sie in den Logs nach vielen winzigen, fast identischen Queries.
  • Übermäßiges Abrufen — Spalten auswählen, die Sie nie nutzen, oder Zeilen, die Sie nicht brauchen. Begrenzen Sie Ergebnisse und wählen Sie nur das aus, was Sie anzeigen.
  • Falsche Connection Pool Konfiguration — ein zu kleiner Pool stellt Requests in die Warteschlange; ein zu großer kann die Datenbank überfordern. Stimmen Sie ihn auf echten Traffic ab.

Wissen Sie es, bevor es Ihre User tun

Tools auf Query-Ebene sagen Ihnen, was innerhalb der Datenbank langsam ist. Sie sagen Ihnen nicht, ob Ihre Datenbank von Ihrer Anwendung aus erreichbar ist oder ob eine Health-Check-Query noch antwortet, während Sie schlafen. Genau da kommt externes Monitoring ins Spiel.

Mit isthisthing.online erstellen Sie einen MySQL- oder PostgreSQL-Monitor, der sich nach Zeitplan mit Ihrer Datenbank verbindet, einen Check ausführt und die Response Time misst. Antwortet die Datenbank nicht mehr oder überschreitet ein Check seinen Timeout, erhalten Sie eine Alert über Email, Slack oder Ihre anderen Kanäle — bevor Ihre User jemals einen Fehler sehen. Zusammen mit einer Incident-Timeline und einer öffentlichen Status Page verwandeln Sie "die Seite wurde langsam" in eine Nachricht, die Sie senden, statt eine, die Sie empfangen.

Eine praktische Checkliste

  • Slow Query Logging aktivieren (PostgreSQL: pg_stat_statements; MySQL: slow_query_log).
  • Finden Sie Ihre 10 langsamsten Queries und führen Sie für jede EXPLAIN ANALYZE aus.
  • Beheben Sie zuerst fehlende Indexes und das N+1-Problem — sie bringen die größten Gewinne.
  • Setzen Sie einen Latency-Schwellwert und alarmieren Sie darauf, nicht nur auf Errors.
  • Fügen Sie in isthisthing.online einen MySQL- oder PostgreSQL-Monitor hinzu, um Erreichbarkeit und Response Time von außen zu überwachen.
  • Überprüfen Sie die Query-Metriken nach jedem Deployment und jeder Schema-Änderung.

Langsame Queries melden sich nicht von selbst. Sie häufen sich an, bis die Seite langsam wirkt, die Datenbank gesättigt ist und Sie einen vermeidbaren Ausfall bekämpfen. Überwachen Sie Ihre Datenbank von innen und von außen — und lassen Sie isthisthing.online es Ihnen zuerst sagen.

Erstellen Sie noch heute Ihren ersten Monitor. Kostenloses Konto eröffnen und fangen Sie langsame Queries ab, bevor es Ihre User tun.