Langsame Abfragen erkennen und beheben
Verwenden Sie pg_stat_statements, log_min_duration_statement und EXPLAIN, um langsame Abfragen zu finden und gezielt zu optimieren.
Langsame Abfragen erkennen und beheben ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Schritt 1: Die langsamen Abfragen finden
Optimieren Sie nicht im Blindflug. Verwenden Sie:
pg_stat_statements– die Abfragen mit der höchsten Gesamtzeitlog_min_duration_statement– protokolliert Abfragen über einem Schwellenwert- pgBadger – übersichtliche Berichte aus den Logs
pg_stat_statements einrichten
Aktivieren Sie die Erweiterung und konfigurieren Sie shared_preload_libraries:
-- postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
-- After restart:
CREATE EXTENSION pg_stat_statements;Die 10 aufwendigsten Abfragen
Die nützlichste einzelne Abfrage für jeden DBA:
SELECT query,
calls,
total_exec_time,
mean_exec_time,
rows
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;Langsame Abfragen protokollieren
Legen Sie einen Schwellenwert fest und lesen Sie das Log:
-- postgresql.conf
log_min_duration_statement = '500ms'
-- All queries running > 500ms are logged.Schritt 2: Mit EXPLAIN ANALYZE reproduzieren
Führen Sie für jede langsame Abfrage EXPLAIN ANALYZE in einer repräsentativen Umgebung aus (mit produktionsnahen Daten). Achten Sie auf:
- Den größten Knoten nach tatsächlicher Ausführungszeit
- Die größte Abweichung zwischen geschätzten und tatsächlichen Zeilen
- Ob die richtigen Indizes verwendet werden
Häufige Korrekturen
- Fehlender Index für eine WHERE- oder JOIN-Spalte
- Nicht sargable Bedingung (Funktion auf der Spalte) – einen Ausdrucksindex hinzufügen oder die Abfrage umschreiben
- Veraltete Statistiken – ANALYZE ausführen
- Falscher Datentyp (verursacht eine implizite Konvertierung) – den Spaltentyp korrigieren
- OR-Bedingungen – als UNION aus Abfragen mit jeweils einer Bedingung umschreiben
- SELECT * ruft zu viele Daten ab – die Projektion einschränken
Veraltete Statistiken
Wenn die geschätzte Zeilenanzahl stark von der tatsächlichen abweicht, führen Sie zuerst ANALYZE aus:
ANALYZE orders;
-- Or rely on autovacuum to do it periodically.Index-Schnellprüfung
Listen Sie die Indizes einer Tabelle und ihre Größen auf:
SELECT indexrelname, pg_size_pretty(pg_relation_size(indexrelid))
FROM pg_stat_user_indexes
WHERE relname = 'orders'
ORDER BY pg_relation_size(indexrelid) DESC;Nicht verwendete Indizes
Finden Sie Indizes, die nie verwendet werden:
SELECT schemaname, relname, indexrelname, idx_scan
FROM pg_stat_user_indexes
WHERE idx_scan = 0
ORDER BY pg_relation_size(indexrelid) DESC;
-- Consider dropping them — they slow writes for no read benefit.Lock-Konflikte
Manchmal ist eine Abfrage „langsam“, weil sie auf einen Lock wartet. Prüfen Sie pg_stat_activity auf wait_event:
SELECT pid, state, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE state <> 'idle';Muster für das Umschreiben von Abfragen
- Verschieben Sie Filter nach WHERE
- Ersetzen Sie eine korrelierte Unterabfrage in SELECT durch JOIN + GROUP BY
- Ersetzen Sie OR durch UNION ALL aus indizierten Abfragen
- Verwenden Sie Fensterfunktionen statt Self-Joins
- Materialisieren Sie wiederholte Unterabfragen mit CTEs (wenn der Planer Schwierigkeiten hat)
Iterieren
Performance-Tuning ist ein Kreislauf: messen → Hypothese aufstellen → ändern → messen. Raten Sie nicht.
Zusammenfassung
Finden Sie langsame Abfragen mit pg_stat_statements, analysieren Sie sie mit EXPLAIN ANALYZE, beheben Sie die Probleme mit Indizes / ANALYZE / Umschreibungen und iterieren Sie.
Kurztest
Welche PostgreSQL-Erweiterung zeigt die zeitaufwendigsten Abfragen nach ihrer Gesamtlaufzeit?
Häufig gestellte Fragen
Ist die Lektion „Langsame Abfragen erkennen und beheben“ kostenlos?
Ja — der vollständige Text von „Langsame Abfragen erkennen und beheben“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Langsame Abfragen erkennen und beheben“?
Verwenden Sie pg_stat_statements, log_min_duration_statement und EXPLAIN, um langsame Abfragen zu finden und gezielt zu optimieren. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Langsame Abfragen erkennen und beheben“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- EXPLAIN und EXPLAIN ANALYZE lesen
- Sequenzielle Scans vs. Index-Scans
- Hash Join vs. Merge Join vs. Nested Loop
- Langsame Abfragen erkennen und beheben