LWLock:pg_stat_statements - Amazon Relational Database Service

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_statements eine garbage collection-Operation für die pgss_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.

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 | 6388797791882029332

PostgreSQL 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.