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 im Shared-Modus eine einfache Sperre (LWLock) für den Pufferinhalt. 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 Ereignis LWLock:buffer_content
(BufferContent
) weist darauf hin, dass mehrere Prozesse versuchen, Lightweight-Locks (LWLocks) für den Inhalt eines bestimmten Puffers zu aktivieren.
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 ist darauf zurückzuführen, dass Prozesse, die Sperren enthalten, diese länger behalten können, während sie I/O Festplattenoperationen 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 Amazon Aurora Aurora-DB-Instance-Klassen.
Überwachen Sie die BufferCacheHitRatio
Metrik, die den Prozentsatz der Anfragen misst, die vom Puffercache einer DB-Instance in Ihrem DB-Cluster bedient werden. Diese Metrik gibt Aufschluss über die Datenmenge, die aus dem Speicher bereitgestellt wird. Eine hohe Trefferquote bedeutet, dass Ihre DB-Instance über ausreichend Arbeitsspeicher für Ihren Arbeitsdatensatz verfügt, während eine niedrige Trefferquote 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 Speichereinstellungen des PG Collector-Berichts
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 „Unbenutzte Indizes“ des PG Collector-Berichts
Doppelte Indizes entfernen
Identifizieren Sie doppelte Indizes und entfernen Sie sie.
Der Abschnitt über doppelte Indizes des PG Collector-Berichts
Ungültige Indizes löschen oder NEU INDIZIEREN
Ungültige Indizes treten normalerweise auf, wenn Sie CREATE INDEX CONCURRENTLY
oder verwenden REINDEX CONCURRENTLY
und der Befehl fehlschlägt oder abgebrochen wird.
Ungültige Indizes können nicht für Abfragen verwendet werden, obwohl sie trotzdem aktualisiert werden und Speicherplatz beanspruchen.
Der Abschnitt Ungültige Indizes des PG Collector-Berichts
Verwenden Sie Teilindizes
Teilindizes können genutzt werden, um die Abfrageleistung zu verbessern und die Indexgröße zu reduzieren. Ein Teilindex ist ein Index, der auf einer Teilmenge einer Tabelle basiert, wobei die Teilmenge durch einen bedingten Ausdruck definiert ist. Wie in der Dokumentation zum Teilindex
Entfernen Sie die Aufblähung von Tabellen und Indizes
Übermäßiges Aufblähen von Tabellen und Indizes kann sich negativ auf die Datenbankleistung auswirken. Aufgeblähte Tabellen und Indizes erhöhen die Größe des aktiven Arbeitssatzes, wodurch die Effizienz im Arbeitsspeicher beeinträchtigt wird. Darüber hinaus erhöht die Aufblähung die Speicherkosten und verlangsamt die Ausführung von Abfragen. Informationen zur Diagnose von Blähungen finden Sie in der. Diagnostizieren einer Überlastung von Tabellen und Indizes Darüber hinaus bietet der Abschnitt Fragmentierung (Bloat) des PG Collector-Berichts
Um das Aufblähen von Tabellen und Indizes zu beheben, gibt es einige Optionen:
- VACUUM FULL
-
VACUUM FULL
erstellt eine neue Kopie der Tabelle, wobei nur die aktiven Tupel kopiert werden, und ersetzt dann die alte Tabelle durch die neue, wobei eine Sperre erhalten bleibt.ACCESS EXCLUSIVE
Dadurch wird jegliches Lesen oder Schreiben in die Tabelle verhindert, was zu einem Ausfall führen kann. AußerdemVACUUM FULL
dauert es länger, wenn die Tabelle groß ist. - pg_repack
-
Das
pg_repack
ist hilfreich in Situationen, in denenVACUUM FULL
dies möglicherweise nicht geeignet ist. Es erstellt eine neue Tabelle, die die Daten der aufgeblähten Tabelle enthält, verfolgt die Änderungen gegenüber der Originaltabelle und ersetzt dann die Originaltabelle durch die neue. Es sperrt die Originaltabelle nicht für Lese- oder Schreibvorgänge, während die neue Tabelle erstellt wird. Weitere Informationen zur Verwendungpg_repack
finden Sie unter Bloat mit pg_repack und pg_repack entfernen. - REINDEX
-
Der
REINDEX
Befehl kann genutzt werden, um das Aufblähen des Indexes zu beheben.REINDEX
schreibt eine neue Version des Indexes ohne die toten Seiten oder die leeren oder fast leeren Seiten, wodurch der Platzbedarf des Indexes reduziert wird. Ausführliche Informationen zu demREINDEX
Befehl finden Sie in der REINDEX-Dokumentation.
Nach dem Entfernen von Blähungen aus Tabellen und Indizes kann es notwendig sein, die Autovakuum-Frequenz in diesen Tabellen zu erhöhen. Durch die Implementierung aggressiver Autovakuumeinstellungen auf Tabellenebene kann verhindert werden, dass es in future zu Blähungen kommt. Weitere Informationen finden Sie in der Dokumentation unter. Vacuuming and analyzing tables
automatically