Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
LWLock:pg_stat_statements
Das LWLock Warteereignis:PG_STAT_STATEMENTS tritt ein, wenn die Erweiterung die Hashtabelle, die SQL-Anweisungen verfolgt, exklusiv sperrt. pg_stat_statements
Dies passiert in den folgenden Szenarien:
-
Wenn die Anzahl der verfolgten Anweisungen den konfigurierten
pg_stat_statements.max
Parameterwert erreicht und Platz für weitere Einträge geschaffen werden muss, sortiert die Erweiterung die Anzahl der Aufrufe, entfernt die 5% der am wenigsten ausgeführten Anweisungen und füllt den Hash erneut mit den verbleibenden Einträgen auf. -
When
pg_stat_statements
führt einegarbage collection
Operation an derpgss_query_texts.stat
Datei auf der Festplatte durch und schreibt die Datei neu.
Unterstützte Engine-Versionen
Diese Warteereignisinformationen werden für alle Versionen von unterstützt.
Kontext
Grundlegendes zur Erweiterung pg_stat_statements — Die Erweiterung pg_stat_statements verfolgt Statistiken zur Ausführung von SQL-Anweisungen in einer Hashtabelle. Die Erweiterung verfolgt SQL-Anweisungen bis zu dem durch den Parameter definierten Grenzwert. pg_stat_statements.max
Dieser Parameter bestimmt die maximale Anzahl von Anweisungen, die verfolgt werden können, was der maximalen Anzahl von Zeilen in der Ansicht pg_stat_statements entspricht.
Persistenz von Anweisungsstatistiken — Die Erweiterung behält die Anweisungsstatistiken bei jedem Neustart der Instanz bei, indem sie:
-
Daten in eine Datei namens pg_stat_statements.stat schreiben
-
Verwendung des Parameters pg_stat_statements.save zur Steuerung des Persistenzverhaltens
Wenn pg_stat_statements.save auf Folgendes gesetzt ist:
-
on (Standard): Statistiken werden beim Herunterfahren gespeichert und beim Serverstart erneut geladen
-
aus: Statistiken werden weder beim Herunterfahren gespeichert noch beim Serverstart neu geladen
Textspeicher für Abfragen — Die Erweiterung speichert den Text nachverfolgter Abfragen in einer Datei mit dem Namenpgss_query_texts.stat
. Diese Datei kann auf das Doppelte der durchschnittlichen Größe aller verfolgten SQL-Anweisungen anwachsen, bevor die Speicherbereinigung erfolgt. Die Erweiterung erfordert eine exklusive Sperre für die Hashtabelle während der Bereinigungsvorgänge und beim Umschreiben pgss_query_texts.stat
der Datei.
Prozess zur Freigabe von Kontoauszügen — Wenn die Anzahl nachverfolgter Kontoauszüge das pg_stat_statements.max
Limit erreicht und neue Kontoauszüge nachverfolgt werden müssen, erfolgt die Erweiterung wie folgt:
-
Erhält eine exklusive Sperre (:pg_stat_statementsLWLock) für die Hashtabelle.
-
Lädt vorhandene Daten in den lokalen Speicher.
-
Führt eine Schnellsortierung auf der Grundlage der Anzahl der Aufrufe durch.
-
Entfernt die am wenigsten aufgerufenen Anweisungen (unterste 5%).
-
Füllt die Hashtabelle erneut mit den verbleibenden Einträgen auf.
Überwachung der Freigabe von Anweisungen — In PostgreSQL 14 und höher können Sie die Freigabe von Anweisungen mithilfe der Ansicht pg_stat_statements_info überwachen. Diese Ansicht enthält eine Dealloc-Spalte, in der angezeigt wird, wie oft die Zuweisung von Anweisungen aufgehoben wurde, um Platz für neue Anweisungen zu schaffen
Wenn die Freigabe von Anweisungen häufig erfolgt, führt dies zu einer häufigeren Garbage-Collection der Datei auf der pgss_query_texts.stat
Festplatte.
Wahrscheinliche Ursachen für erhöhte Wartezeiten
Zu den typischen Ursachen für erhöhte LWLock:pg_stat_statements
Wartezeiten gehören:
-
Eine Zunahme der Anzahl von eindeutigen Abfragen, die von der Anwendung verwendet werden.
-
Der
pg_stat_statements.max
Parameterwert ist klein im Vergleich zur Anzahl der verwendeten eindeutigen Abfragen.
Aktionen
Abhängig von den Ursachen Ihres Warteereignisses empfehlen wir verschiedene Aktionen. Sie können LWLock:pg_stat_statements
Ereignisse mithilfe von Amazon RDS Performance Insights oder durch Abfragen der Ansicht pg_stat_activity
identifizieren.
Passen Sie die folgenden pg_stat_statements
Parameter an, um das Tracking-Verhalten zu steuern und zu LWLock reduzieren:pg_stat_-Anweisungen warten auf Ereignisse.
Themen
Deaktivieren Sie den Parameter pg_stat_statements.track
Wenn sich das LWLock Wait-Event:pg_stat_statements negativ auf die Datenbankleistung auswirkt und eine schnelle Lösung erforderlich ist, bevor die Ansicht weiter analysiert wird, um die Ursache pg_stat_statements
zu ermitteln, kann der Parameter deaktiviert werden, indem er auf gesetzt wird. pg_stat_statements.track
none
Dadurch wird die Erfassung von Kontoauszugsstatistiken deaktiviert.
Erhöhen Sie den Parameter pg_stat_statements.max
Erhöhen Sie den Wert des Parameters, um die Deallokation zu reduzieren und die Garbage-Collection der pgss_query_texts.stat
Datei auf der Festplatte zu minimieren. pg_stat_statements.max
Der Standardwert ist 5,000
.
Anmerkung
Der pg_stat_statements.max
Parameter ist statisch. Sie müssen Ihre DB-Instance neu starten, um Änderungen an diesem Parameter zu übernehmen.
Deaktivieren Sie den Parameter pg_stat_statements.track_utility
Sie können die Ansicht pg_stat_statements analysieren, um festzustellen, welche Dienstprogrammbefehle die meisten Ressourcen verbrauchen, die von erfasst werden. pg_stat_statements
Der pg_stat_statements.track_utility
Parameter steuert, ob das Modul Dienstprogrammbefehle verfolgt, zu denen alle Befehle außer SELECT, INSERT, UPDATE, DELETE und MERGE gehören. Dieser Parameter ist standardmäßig auf on
festgelegt.
Wenn Ihre Anwendung beispielsweise viele Savepoint-Abfragen verwendet, die von Natur aus einzigartig sind, kann dies die Deallocation von Anweisungen erhöhen. Um dieses Problem zu beheben, können Sie den pg_stat_statements.track_utility
Parameter deaktivieren, sodass Savepoint-Abfragen nicht mehr verfolgt pg_stat_statements
werden.
Anmerkung
Der pg_stat_statements.track_utility
Parameter ist ein dynamischer Parameter. Sie können seinen Wert ändern, ohne Ihre Datenbankinstanz neu zu starten.
Beispiel für eindeutige Speicherpunktabfragen in pg_stat_statements
query | queryid
-------------------------------------------------+---------------------
SAVEPOINT JDBC_SAVEPOINT_495701 | -7249565344517699703
SAVEPOINT JDBC_SAVEPOINT_1320 | -1572997038849006629
SAVEPOINT JDBC_SAVEPOINT_26739 | 54791337410474486
SAVEPOINT JDBC_SAVEPOINT_1294466 | 8170064357463507593
ROLLBACK TO SAVEPOINT JDBC_SAVEPOINT_65016 | -33608214779996400
SAVEPOINT JDBC_SAVEPOINT_14185 | -2175035613806809562
SAVEPOINT JDBC_SAVEPOINT_45837 | -6201592986750645383
SAVEPOINT JDBC_SAVEPOINT_1324 | 6388797791882029332
PostgreSQL 17 führt mehrere Verbesserungen für die Befehlsverfolgung von Dienstprogrammen ein:
-
Savepoint-Namen werden jetzt als Konstanten angezeigt.
-
Die globale Transaktion IDs (GIDs) von zweiphasigen Commit-Befehlen wird jetzt als Konstanten angezeigt.
-
Die Namen von DEALLOCATE-Anweisungen werden als Konstanten angezeigt.
-
CALL-Parameter werden jetzt als Konstanten angezeigt.