Wie aktiviere ich das Logging von langsamen Abfragen in PostgreSQL?

Melden
  1. Konfigurationsdatei finden und bearbeiten
  2. Wichtige Parameter zum Logging langsamer Abfragen
  3. Beispielkonfiguration
  4. Server neu starten oder Konfiguration neu laden
  5. Überprüfung der Funktion
  6. Zusammenfassung

Um das Logging von langsamen Abfragen in PostgreSQL zu aktivieren, müssen einige Einstellungen in der Konfigurationsdatei postgresql.conf vorgenommen werden. Diese Datei enthält alle zentralen Parameter zur Steuerung des Verhaltens des Datenbankservers. Der Prozess umfasst das Anpassen bestimmter Parameter, damit langsame SQL-Abfragen erkannt und protokolliert werden.

Konfigurationsdatei finden und bearbeiten

Die postgresql.conf befindet sich typischerweise im Datenverzeichnis des PostgreSQL-Servers. Der genaue Pfad variiert je nach Betriebssystem und Installation. Unter Linux-Systemen könnte sie zum Beispiel unter /etc/postgresql/ /main/postgresql.conf liegen, unter Windows im Installationsverzeichnis von PostgreSQL. Alternativ kann man an der PostgreSQL-Kommandozeile mit dem SQL-Befehl SHOW config_file; den Pfad ermitteln.

Die Bearbeitung der Datei erfordert meist administrative Rechte, da Änderungen am Serververhalten vorgenommen werden. Die Datei kann mit einem Texteditor geöffnet werden, etwa nano oder vim unter Linux, oder einem Editor unter Windows.

Wichtige Parameter zum Logging langsamer Abfragen

Der zentrale Parameter ist log_min_duration_statement. Er steuert, ab welcher Ausführungsdauer einer SQL-Abfrage diese im Log festgehalten wird. Der Wert wird in Millisekunden angegeben. Beispielsweise bedeutet log_min_duration_statement = 500, dass alle Abfragen, die länger als 500 Millisekunden dauern, protokolliert werden.

Ein Wert von 0 bewirkt, dass alle Abfragen unabhängig von ihrer Dauer geloggt werden. Möchte man das Logging von langsamen Abfragen deaktivieren, setzt man den Wert auf -1, den Standardwert, bei dem keine solche Protokollierung erfolgt.

Darüber hinaus ist es wichtig, das allgemeine Logging überhaupt zu aktivieren. Der Parameter logging_collector muss auf on gesetzt werden, damit PostgreSQL Logeinträge in Dateien schreibt. Sonst landen die Logs möglicherweise nur in der Standardausgabe des Servers und sind schwer zugänglich.

Weitere relevante Parameter sind zum Beispiel log_directory (Verzeichnis, in dem Logdateien abgelegt werden), log_filename (Name der Logdateien), sowie log_statement oder log_line_prefix für die Gestaltung der Logs.

Beispielkonfiguration

Hier ein exemplarischer Ausschnitt für die postgresql.conf:

logging_collector = onlog_min_duration_statement = 1000 # Loggt Abfragen, die länger als 1000 ms dauernlog_directory = pg_log # Standardverzeichnis für Logslog_filename = postgresql-%Y-%m-%d_%H%M%S.log # Logdateiname mit Zeitstempellog_line_prefix = %t : user=%u,db=%d # Präfix mit Zeit, Prozess-ID, Nutzer und DB

Diese Einstellungen bewirken, dass alle Abfragen, die länger als eine Sekunde laufen, in den Logdateien im Verzeichnis pg_log protokolliert werden.

Server neu starten oder Konfiguration neu laden

Nachdem die postgresql.conf angepasst wurde, müssen die Änderungen vom Server übernommen werden. Für Änderungen am Parameter log_min_duration_statement reicht meistens ein Reload der Konfiguration, der ohne kompletten Neustart durchgeführt werden kann.

Ein Reload erfolgt zum Beispiel mit dem Befehl:

SELECT pg_reload_conf();

Alternativ kann der Datenbankserver über das Betriebssystem neu gestartet werden. Ein kompletter Neustart stellt sicher, dass auch alle anderen Änderungen geladen werden, ist aber in produktiven Systemen oft mit kurzer Downtime verbunden.

Überprüfung der Funktion

Nach dem Aktivieren des Loggings kann man prüfen, ob länger laufende Abfragen protokolliert werden, indem man bewusst eine Abfrage ausführt, die die gesetzte Schwellenzeit überschreitet, zum Beispiel eine Abfrage mit pg_sleep(2) für zwei Sekunden Verzögerung.

Die Einträge finden sich dann in den Logdateien im konfigurierten Verzeichnis. Die Logeinträge enthalten Informationen wie die ausgeführte SQL-Abfrage, die Ausführungszeit sowie Metadaten wie Nutzer und Datenbank.

Zusammenfassung

Das Logging von langsamen Abfragen in PostgreSQL wird durch die Einstellung log_min_duration_statement gesteuert. Kombiniert mit aktiviertem logging_collector und geeignet konfigurierten Logverzeichnissen lassen sich so genau die Abfragen identifizieren, die länger als eine definierte Dauer laufen. Dies ist ein wertvolles Werkzeug zur Performanceanalyse und zur Optimierung von Datenbankanwendungen.

0

Kommentare