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:buffer_content (BufferContent)
Das Ereignis LWLock:buffer_content tritt ein, wenn eine Sitzung darauf wartet, eine Datenseite im Speicher zu lesen oder zu schreiben, während eine andere Sitzung diese Seite zum Schreiben gesperrt hat. In Aurora PostgreSQL 13 und höher heißt dieses Warteereignis BufferContent.
Unterstützte Engine-Versionen
Diese Warteereignisinformationen werden für alle Versionen von Aurora PostgreSQL unterstützt.
Kontext
Um Daten zu lesen oder zu manipulieren, greift PostgreSQL über Shared Memory Puffer darauf zu. Um aus dem Puffer zu lesen, erhält ein Prozess eine leichte Sperre (LWLock) für den Pufferinhalt im freigegebenen Modus. Um in den Puffer zu schreiben, wird diese Sperre im exklusiven Modus angezeigt. Gemeinsame Sperren ermöglichen es anderen Prozessen, gleichzeitig gemeinsame Sperren für diesen Inhalt zu erwerben. Exklusive Sperren verhindern, dass andere Prozesse irgendeine Art von Sperre erhalten.
Das LWLock:buffer_content (BufferContent)-Ereignis zeigt an, dass mehrere Prozesse versuchen, einfache Sperren (LWLocks) auf Inhalte eines bestimmten Puffers anzuwenden.
Wahrscheinliche Ursachen für erhöhte Wartezeiten
Wenn das LWLock:buffer_content(BufferContent)-Ereignis mehr als normal auftritt, was möglicherweise auf ein Leistungsproblem hinweist, sind die folgenden typischen Ursachen:
- Die gleichzeitigen Aktualisierungen der gleichen Daten wurden erhöht
-
Es kann zu einer Zunahme der Anzahl gleichzeitiger Sitzungen mit Abfragen kommen, die denselben Pufferinhalt aktualisieren. Diese Behauptung kann bei Tabellen mit vielen Indizes ausgeprägter sein.
- Workload-Daten befinden sich nicht im Speicher
-
Wenn sich Daten, die die aktive Workload verarbeitet, nicht im Speicher befinden, können diese Warteereignisse zunehmen. Dieser Effekt liegt daran, dass Prozesse, die Sperren halten, sie länger halten können, während sie Festplatten-I/O-Vorgänge ausführen.
- Übermäßiger Einsatz von Fremdschlüsselbeschränkungen
-
Fremdschlüsseleinschränkungen können die Zeit erhöhen, die ein Prozess an einer Pufferinhaltssperre hält. Dieser Effekt liegt daran, dass Lesevorgänge eine gemeinsame Pufferinhaltssperre für den referenzierten Schlüssel erfordern, während dieser Schlüssel aktualisiert wird.
Aktionen
Abhängig von den Ursachen Ihres Warteereignisses empfehlen wir verschiedene Aktionen. Sie können LWLock:buffer_content(BufferContent)-Ereignisse identifizieren, indem Sie Amazon RDS Performance Insights verwenden oder die Ansicht pg_stat_activity abfragen.
Themen
Verbessern Sie die Effizienz im Speicher
Um die Wahrscheinlichkeit zu erhöhen, dass sich aktive Workload-Daten im Speicher befinden, partitionieren Sie Tabellen oder skalieren Sie Ihre Instance-Klasse hoch. Weitere Informationen zu DB-Instance-Klassen finden Sie unter DB-Instance-Klassen von Amazon Aurora.
Überwachen Sie die BufferCacheHitRatio-Metrik. Diese misst den Prozentsatz der Anfragen, die vom Puffer-Cache einer DB-Instance in Ihrem DB-Cluster verarbeitet werden. Diese Metrik gibt Aufschluss über die Datenmenge, die vom Speicher bereitgestellt wird. Eine hohe Trefferrate bedeutet, dass Ihre DB-Instance über ausreichend Speicherplatz für Ihren Arbeitsdatensatz verfügt, während eine niedrige Trefferrate darauf hindeutet, dass Ihre Abfragen häufig auf Daten aus dem Speicher zugreifen.
Die Cache-Lesetreffer pro Tabelle und die Cache-Lesetreffer pro Index im Abschnitt zu den Speichereinstellungen des PG-Collector
Reduzieren Sie die Verwendung von Fremdschlüsselbeschränkungen
Untersuchen Sie Workloads, bei denen eine hohe Anzahl von LWLock:buffer_content(BufferContent)-Wait-Ereignissen auf die Verwendung von Fremdschlüsseleinschränkungen auftritt. Entfernen Sie unnötige Fremdschlüsselbeschränkungen.
Entferne nicht verwendete Indizes
Identifizieren Sie bei Workloads mit einer hohen Anzahl von LWLock:buffer_content(BufferContent)-Wait-Ereignissen nicht verwendete Indizes und entfernen Sie sie.
Der Abschnitt zu nicht genutzten Indizes im PG-Collector
Entfernen von doppelten Indizes
Identifizieren Sie doppelte Indizes und entfernen Sie sie.
Der Abschnitt zu doppelten Indizes im PG-Collector
Löschen oder NEU INDIZIEREN von ungültigen Indizes
Ungültige Indizes kommen in der Regel vor, wenn CREATE INDEX CONCURRENTLY oder REINDEX CONCURRENTLY verwendet wird und der Befehl fehlschlägt oder abgebrochen wird.
Ungültige Indizes können nicht für Abfragen verwendet werden, werden aber trotzdem aktualisiert und beanspruchen Speicherplatz.
Der Abschnitt zu ungültigen Indizes im PG-Collector
Verwenden von partiellen Indizes
Partielle Indizes können verwendet werden, um die Abfrageleistung zu verbessern und die Indexgröße zu reduzieren. Ein partieller Index ist ein Index, der auf einer Teilmenge einer Tabelle basiert, wobei die Teilmenge durch einen bedingten Ausdruck definiert ist. Wie in der partial index
Entfernen von überflüssigen Daten aus Tabellen und Indizes (Bloat)
Ein übermäßiger Tabellen- und Index-Bloat kann sich negativ auf die Datenbankleistung auswirken. Tabellen und Indizes, die viel überflüssige Daten enthalten, erhöhen die Größe des aktiven Arbeitssatzes, wodurch die Effizienz im Arbeitsspeicher beeinträchtigt wird. Darüber hinaus erhöhen überflüssige Daten die Speicherkosten und verlangsamen die Ausführung von Abfragen. Informationen zur Bloat-Diagnose finden Sie unter Diagnostizieren einer Überlastung von Tabellen und Indizes. Darüber hinaus gibt der Abschnitt zur Fragmentierung (Bloat) im PG-Collector
Zur Behebung des Problems der überflüssigen Daten in Tabellen und Indizes gibt es einige Optionen:
- VACUUM FULL
-
VACUUM FULLerstellt eine neue Kopie der Tabelle, wobei nur die aktiven Tupel kopiert werden, und ersetzt dann die alte Tabelle durch die neue, wobei eineACCESS EXCLUSIVE-Sperre beibehalten wird. Dadurch wird jegliches Lesen oder Schreiben in die Tabelle verhindert, was zu einem Ausfall führen kann. Außerdem dauertVACUUM FULLlänger, wenn die Tabelle groß ist. - pg_repack
-
pg_repackist hilfreich in Situationen, in denenVACUUM FULLmöglicherweise nicht geeignet ist. Es erstellt eine neue Tabelle, die die Daten der Tabelle mit den überflüssigen Daten enthält, verfolgt die Änderungen gegenüber der Originaltabelle nach und ersetzt diese Tabelle dann durch die neue. Es sperrt die Originaltabelle nicht für Lese- oder Schreibvorgänge, während die neue Tabelle erstellt wird. Weitere Informationen zur Verwendung vonpg_repackfinden Sie unter Reduzieren von überflüssigen Daten mit pg_repack und unter pg_repack. - REINDEX
-
Der
REINDEX-Befehl kann genutzt werden, um das Problem eines Index-Bloat zu beheben.REINDEXschreibt eine neue Version des Index ohne die „toten“ oder leeren bzw. fast leeren Seiten, was den Platzverbrauch des Index reduziert. Detaillierte Informationen zumREINDEX-Befehl finden Sie in der REINDEX-Dokumentation.
Nach dem Entfernen der überflüssigen Daten aus Tabellen und Indizes kann es notwendig sein, die Selbstbereinigungsfrequenzen für diese Tabellen zu erhöhen. Die Implementierung von Einstellungen für eine aggressive Selbstbereinigung auf Tabellenebene kann dazu beitragen, überflüssige Daten zu vermeiden. Weitere Informationen finden Sie in der Dokumentation über Vacuuming and analyzing tables
automatically.