PostgreSQL PG14 verbessert die Protokollierung über libpq

Aktualisierung: 2. Juli 2023

PostgreSQL 14 verbessert die Protokollierung mit libpq

Die libpq-Funktion wurde in PG14 erweitert, um die Verfügbarkeit der Anwendungsserver/Client-Kommunikation zu verfolgen. Es fügt neue Optionen zur Steuerung des Ausgabeformats hinzu.

Hintergrund

libpq ist eine der Client-Bibliotheken, Benutzer können die PQtrace-Funktion ausführen, um die Client-Server-Kommunikation aufzuzeichnen. Diese Kommunikation ist eine Art von Protokollinformation, die von PG verwendet wird, einschließlich: die Kennung des Nachrichtentyps, die Länge der Nachricht und den Nachrichteninhalt der Austauschinformationen.

Anwendungsentwickler können dieses Protokoll verwenden, um festzustellen, ob die Kommunikation wie erwartet funktioniert. Verwenden Sie die folgende Anweisung als Beispiel:

CREATE TABLESPACE regresstblspacewith

STANDORT '/home/postgres/src/test/regress/testtablespace'

MIT zufälligen_Seitenkosten = 3.0);

Die Anwendung, die PQtrace in PG13 aufruft, gibt die folgenden Protokolltypen in die angegebene Datei aus:

Von libpq in PG13 generierte Protokolle

Zu beachten ist, dass die PQtrace-Protokollausgabe der aktuellen PG-Version keinen Zeitstempel enthält und somit nicht als Referenz zur Analyse langsamer Abfragen verwendet werden kann. Da die Nachrichtenkennung, die Server-/Client-Nachrichtenlänge und der Ausgabeinhalt in einer separaten Zeile stehen, ist außerdem die Zuverlässigkeit relativ gering und die Analyse von Protokollnachrichten schwieriger. Z und C, die mit 1 gekennzeichnet sind, sind die Bezeichner der Protokollnachricht. Um die Bedeutung der einzelnen Bezeichner zu verstehen, lesen Sie den Abschnitt Nachrichtenformate des Handbuchs

Übersicht über Funktionsverbesserungen

In PG14 wurde die PQtrace-Funktion verbessert, um das Ausgabeprotokoll lesbarer zu machen und einen Zeitstempel aufzunehmen. Zur Steuerung der Ausgabe des Zeitstempels wurde eine neue Funktion PQsetTraceFlags hinzugefügt.

Protokollausgabe verbessern

Die verbesserte Trace-Funktion in PG14 erzeugt eine Ausgabe ähnlich der folgenden:

Von libpq in PG 14 generierte Protokolle

1) Enthält einen Zeitstempel

2) Der Code der Nachrichtenrichtung ist intuitiver: F bedeutet Frontend, B bedeutet Backend

3) Ausgabe des offiziellen Nachrichtennamens anstelle des Bezeichners der Protokollnachricht

4) Aussagekräftige Protokollnachrichten werden in einer Zeile ausgegeben

Protokollabrufmethode

Beginnen Sie wie zuvor mit der Protokollierung, indem Sie die PQtrace-Funktion von libpq aufrufen. Wenn Sie den Zeitstempel nicht ausgeben müssen, können Sie ihn über die Funktion PQsetTraceFlags steuern.

Beeinflussen

PQtrace gibt Zeitstempel aus, die Benutzern helfen können, langsame Abfragen zu identifizieren. Wenn die Anwendung plötzlich langsamer wird, können Sie anhand der Zeitstempeldifferenz im Protokoll feststellen, ob der Server oder Client länger gebraucht hat. Wichtige Protokollmeldungen werden in einer Zeile ausgegeben, so dass auch Personen, die mit lipq-Logs nicht vertraut sind, die Kommunikation zwischen Server und Client leicht nachvollziehen können. Indem Sie die PQsetTraceFlags-Funktion verwenden, um zu steuern, ob der Zeitstempel ausgegeben werden soll, können Sie dieses Protokoll für Regressionstests verwenden. Indem Sie keinen Zeitstempel ausgeben, können Sie das Protokoll mit den Ergebnissen des erwarteten Testlaufs füllen und einfach mit dem während des Testlaufs erhaltenen Protokoll vergleichen.

Zukunft

Das libpq-Protokoll von PG14 wird Zeitstempel und besser lesbaren Text enthalten. In nachfolgenden Versionen werden wir die Usability in folgenden Aspekten weiter verbessern:

1) Die aktuelle Funktion schreibt das Protokoll in die der PQtrace-Funktion zugeordnete Datei. In einigen Fällen wird die Protokolldatei sehr stark erweitert, was den Dateibetrieb beeinträchtigt. Um dieses Problem zu lösen, hoffen wir, eine Funktion bereitzustellen, um die maximale Größe der Datei anzugeben.

2) Ich hoffe, Umgebungsvariablen und Verbindungsparameter hinzuzufügen, um die Verzeichnisposition der Protokollausgabe und den Namen der Protokolldatei festzulegen, um sie an die Umgebung anzupassen, ohne die Anwendung zu ändern.

  Links:

lq9p16e

nl8060bc3117e