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 Warteereignis LWLock:pg_stat_statements tritt auf, wenn die pg_stat_statements-Erweiterung die Hash-Tabelle, die die SQL-Anweisungen nachverfolgt, exklusiv sperrt. Dies passiert in folgenden Szenarien:
-
Wenn die Anzahl der nachverfolgten 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 mit den verbleibenden Einträgen neu auf. -
Wenn
pg_stat_statementseinegarbage collection-Operation für diepgss_query_texts.stat-Datei auf der Festplatte durchführt und die Datei neu schreibt
Unterstützte Engine-Versionen
Diese Warteereignisinformationen werden für alle Versionen von RDS für PostgreSQL unterstützt.
Kontext
Grundlagen der pg_stat_statements-Erweiterung – Die pg_stat_statements-Erweiterung verfolgt Statistiken zur Ausführung von SQL-Anweisungen in einer Hash-Tabelle nach. Die Erweiterung verfolgt SQL-Anweisungen bis zu dem durch den pg_stat_statements.max-Parameter definierten Grenzwert nach. Dieser Parameter bestimmt die maximale Anzahl von Anweisungen, die nachverfolgt werden können, was der maximalen Anzahl von Zeilen in der pg_stat_statements-Ansicht entspricht.
Persistenz von Anweisungsstatistiken – Die Erweiterung behält die Anweisungsstatistiken über Instance-Neustarts hinweg bei, indem sie Folgendes durchführt:
-
Schreiben von Daten in eine Datei mit dem Namen pg_stat_statements.stat
-
Steuern des Persistenzverhaltens mit dem pg_stat_statements.save-Parameter
Wenn pg_stat_statements.save auf Folgendes gesetzt ist:
-
on (Standard): Statistiken werden beim Herunterfahren gespeichert und beim Serverstart neu geladen
-
off: Statistiken werden weder beim Herunterfahren gespeichert noch beim Serverstart neu geladen
Abfragetextspeicher – Die Erweiterung speichert den Text nachverfolgter Abfragen in einer Datei mit dem Namen pgss_query_texts.stat. Diese Datei kann auf das Doppelte der durchschnittlichen Größe aller nachverfolgten SQL-Anweisungen anwachsen, ehe eine Garbage Collection erfolgt. Die Erweiterung erfordert eine exklusive Hash-Tabellen-Sperre während der Bereinigungsvorgänge und beim Neuschreiben der pgss_query_texts.stat-Datei.
Prozess der Freigabe von Anweisungen – Wenn die Anzahl der nachverfolgten Anweisungen den pg_stat_statements.max-Grenzwert erreicht und neue Anweisungen nachverfolgt werden müssen, führt die Erweiterung Folgendes durch:
-
Sie sperrt die Hash-Tabelle exklusiv (LWLock:pg_stat_statements).
-
Sie lädt vorhandene Daten in den lokalen Speicher.
-
Sie führt eine Schnellsortierung auf der Grundlage der Anzahl der Aufrufe durch.
-
Sie entfernt die am wenigsten aufgerufenen Anweisungen (unterste 5 %).
-
Sie füllt die Hash-Tabelle mit den verbleibenden Einträgen neu auf.
Überwachung der Anweisungsfreigabe – In PostgreSQL 14 und höher können Sie die Freigabe von Anweisungen mit der pg_stat_statements_info-Ansicht überwachen. Diese Ansicht enthält eine Freigabe-Spalte, in der angezeigt wird, wie oft Anweisungen freigegeben wurden, 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 bei der pgss_query_texts.stat-Datei auf der Festplatte.
Wahrscheinliche Ursachen für erhöhte Wartezeiten
Zu den typischen Ursachen für eine Zunahme bei den LWLock:pg_stat_statements-Wartezeiten gehören:
-
eine Zunahme bei der Anzahl eindeutiger Abfragen, die von der Anwendung verwendet werden
-
ein
pg_stat_statements.max-Parameterwert, der im Vergleich zur Anzahl der verwendeten eindeutigen Abfragen klein ist
Aktionen
Abhängig von den Ursachen Ihres Warteereignisses empfehlen wir verschiedene Aktionen. Sie können LWLock:pg_stat_statements-Ereignisse identifizieren, indem Sie Erkenntnisse zur Amazon-RDS-Leistung verwenden oder die pg_stat_activity-Ansicht abfragen.
Passen Sie die folgenden pg_stat_statements-Parameter an, um das Nachverfolgungsverhalten zu steuern und die Anzahl der LWLock:pg_stat_statements-Warteereignisse zu reduzieren.
Themen
Deaktivieren des pg_stat_statements.track-Parameters
Wenn das LWLock:pg_stat_statements-Warteereignis die Datenbankleistung negativ beeinträchtigt und eine schnelle Lösung erforderlich ist, bevor die pg_stat_statements-Ansicht weiter analysiert wird, um die Ursache zu ermitteln, kann der pg_stat_statements.track-Parameter deaktiviert werden, indem er auf none gesetzt wird. Dadurch wird die Erfassung von Anweisungsstatistiken deaktiviert.
Erhöhen des pg_stat_statements.max-Parameters
Erhöhen Sie den Wert des pg_stat_statements.max-Parameters, um die Freigabe zu reduzieren und die Garbage Collection für die pgss_query_texts.stat-Datei auf der Festplatte zu minimeren. 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 des pg_stat_statements.track_utility-Parameters
Sie können die pg_stat_statements-Ansicht analysieren, um festzustellen, welche Dienstprogrammbefehle die meisten Ressourcen verbrauchen, die von pg_stat_statements nachverfolgt werden.
Der pg_stat_statements.track_utility-Parameter steuert, ob das Modul Dienstprogrammbefehle nachverfolgt, 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 eindeutig sind, kann dies die Freigabe von Anweisungen erhöhen. Als Abhilfemaßnahme können Sie den pg_stat_statements.track_utility-Parameter deaktivieren, sodass Savepoint-Abfragen nicht mehr von pg_stat_statements nachverfolgt werden.
Anmerkung
Der pg_stat_statements.track_utility-Parameter ist ein dynamischer Parameter. Sie können dessen Wert ändern, ohne Ihre Datenbank-Instance neu starten zu müssen.
Beispiel für eindeutige Savepoint-Abfragen 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 | 6388797791882029332PostgreSQL 17 führt mehrere Verbesserungen für die Nachverfolgung von Dienstprogrammbefehlen ein:
-
Savepoint-Namen werden jetzt als Konstanten angezeigt.
-
Globale Transaktions-IDs (GIDs) von zweiphasigen Commit-Befehlen werden jetzt als Konstanten angezeigt.
-
Die Namen von DEALLOCATE-Anweisungen werden als Konstanten angezeigt.
-
CALL-Parameter werden jetzt als Konstanten angezeigt.