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.
Arbeiten mit Postgre SQL Autovacuum auf Amazon RDS for Postgre SQL
Wir empfehlen dringend, die Autovacuum-Funktion zu verwenden, um den Zustand Ihrer Postgre-DB-Instance aufrechtzuerhalten. SQL Autovacuum automatisiert den Start der und der VACUUM Befehle. ANALYZE Sie prüft auf Tabellen mit einer großen Zahl von eingefügten, aktualisierten oder gelöschten Tupeln. Nach dieser Prüfung wird Speicherplatz zurückgewonnen, indem es veraltete Daten oder Tupel aus der Postgre-Datenbank entfernt. SQL
Standardmäßig ist Autovacuum für die Amazon RDS for SQL Postgre-DB-Instances aktiviert, die Sie mit einer der standardmäßigen SQL Postgre-DB-Parametergruppen erstellen. Dazu zählen default.postgres10
, default.postgres11
, usw. Alle SQL Standard-Postgre-DB-Parametergruppen haben einen rds.adaptive_autovacuum
Parameter, der auf gesetzt ist1
, wodurch die Funktion aktiviert wird. Andere Konfigurationsparameter, die mit der Selbstbereinigungsfunktion verknüpft sind, sind ebenfalls standardmäßig festgelegt. Da diese Standardwerte generisch sind, können Sie davon profitieren, einige der mit der Selbstbereinigungsfunktion verbundenen Parameter für Ihre spezifische Workload zu optimieren.
Im Folgenden finden Sie weitere Informationen zum Autovacuum und dazu, wie Sie einige seiner Parameter auf Ihrer RDS for Postgre-DB-Instance optimieren können. SQL Informationen auf hoher Ebene finden Sie unter Bewährte Methoden für die Arbeit mit Postgre SQL.
Themen
- Zuweisen von Arbeitsspeicher für die Selbstbereinigung
- Verringern der Wahrscheinlichkeit von Transaktions-ID-Wraparounds
- Ermittlung, ob die Tabellen in Ihrer Datenbank bereinigt werden müssen
- Ermittlung, für welche Tabellen derzeit eine Selbstbereinigung nötig ist
- Ermittlung, ob die Selbstbereinigung derzeit ausgeführt wird und wie lange sie dauert
- Ausführen einer manuellen Bereinigungseinfrierung
- Neuindizierung einer Tabelle während der Ausführung einer Selbstbereinigung
- Verwalten der automatischen Bereinigung mit großen Indizes
- Weitere Parameter, die sich auf die Selbstbereinigung auswirken
- Festlegen von Selbstbereinigungsparametern auf Tabellenebene
- Protokollieren von Selbstbereinigung- und Bereinigungsaktivitäten
- Das Verhalten von Autovacuum bei ungültigen Datenbanken verstehen
- Identifizieren und lösen Sie aggressive Vakuumblocker in RDS for Postgre SQL
Zuweisen von Arbeitsspeicher für die Selbstbereinigung
Einer der wichtigsten Parameter, der sich auf die Leistung der Selbstbereinigung auswirkt, ist der Parameter autovacuum_work_mem
autovacuum_work_mem
Parameter auf -1 gesetzt, was bedeutet, dass stattdessen die Einstellung von verwendet maintenance_work_mem
wird. Für alle anderen Versionen autovacuum_work_mem
wird durch GREATEST ({DBInstanceClassMemory/32768}, 65536) bestimmt.
Bei manuellen Vakuumvorgängen wird immer die maintenance_work_mem
Einstellung mit der Standardeinstellung GREATEST ({DBInstanceClassMemory/63963136 *1024}, 65536) verwendet. Sie kann auch auf Sitzungsebene mithilfe des Befehls für gezieltere manuelle Operationen angepasst werden. SET
VACUUM
autovacuum_work_mem
Legt fest, dass der Speicher für das automatische Vakuumieren die Kennungen von toten Tupeln () zum Absaugen von Indizes enthalten soll. pg_stat_all_tables.n_dead_tup
Beachten Sie bei Berechnungen zur Bestimmung des autovacuum_work_mem
Parameterwerts Folgendes:
-
Wenn Sie den Parameter zu niedrig einstellen, muss der Vakuumprozess die Tabelle möglicherweise mehrmals scannen, um die Arbeit abzuschließen. Solche wiederholten Scans können negative Auswirkungen auf die Leistung haben. Bei größeren Instanzen kann die Einstellung von
maintenance_work_mem
oderautovacuum_work_mem
auf mindestens 1 GB die Leistung beim Bereinigen von Tabellen mit einer hohen Anzahl von toten Tupeln verbessern. In SQL Postgre-Versionen 16 und früheren Versionen ist die Speichernutzung von Vacuum jedoch auf 1 GB begrenzt, was ausreicht, um etwa 179 Millionen tote Tupel in einem einzigen Durchgang zu verarbeiten. Wenn eine Tabelle mehr tote Tupel enthält, muss Vacuum mehrere Durchläufe durch die Indizes der Tabelle durchführen, was den Zeitaufwand erheblich erhöht. Ab SQL Postgre-Version 17 gibt es kein Limit von 1 GB, und Autovacuum kann mithilfe von Radixbäumen mehr als 179 Millionen Tupel verarbeiten.Ein Tupelbezeichner ist 6 Byte groß. Um den Speicherbedarf für das Löschen eines Tabellenindexes zu schätzen, fragen Sie
pg_stat_all_tables.n_dead_tup
nach der Anzahl der toten Tupel ab und multiplizieren Sie diese Zahl dann mit 6, um den Speicherplatz zu ermitteln, der für das Löschen des Index in einem einzigen Durchgang erforderlich ist. Sie können die folgende Abfrage verwenden:SELECT relname AS table_name, n_dead_tup, pg_size_pretty(n_dead_tup * 6) AS estimated_memory FROM pg_stat_all_tables WHERE relname = '
name_of_the_table
'; -
Der Parameter
autovacuum_work_mem
funktioniert in Verbindung mit dem Parameterautovacuum_max_workers
. Jeder Mitarbeiter unter Ihnenautovacuum_max_workers
kann den von Ihnen zugewiesenen Speicher verwenden. Wenn Sie viele kleine Tabellen haben, müssen Sie mehrautovacuum_max_workers
und wenigerautovacuum_work_mem
zuteilen. Wenn Sie über große Tabellen (größer als 100 GB) verfügen, sollten Sie mehr Speicher und weniger Arbeitsprozesse zuweisen. Sie müssen genügend Arbeitsspeicher zuweisen, um den Vorgang für Ihre größte Tabelle erfolgreich ausführen zu können. Stellen Sie daher sicher, dass die Kombination aus Arbeitsprozessen und Arbeitsspeicher dem Gesamtspeicher entspricht, den Sie zuweisen möchten.
Verringern der Wahrscheinlichkeit von Transaktions-ID-Wraparounds
In einigen Fällen sind Parametergruppen-Einstellungen, die sich auf die Selbstbereinigung beziehen, möglicherweise nicht aggressiv genug, um Transaktions-ID-Wraparounds zu verhindern. Um dieses Problem zu lösen, RDS SQL bietet Postgre einen Mechanismus, der die Werte der Autovakuum-Parameter automatisch anpasst. Die adaptive Einstellung der Autovakuum-Parameter ist eine Funktion für RDS Postgre. SQL Eine ausführliche Erklärung des TransactionID-Wraparounds finden Sie in der
Die adaptive Autovacuum-Parameteroptimierung ist standardmäßig RDS für SQL Postgre-Instanzen aktiviert, bei denen der dynamische Parameter auf ON gesetzt ist. rds.adaptive_autovacuum
Wir raten dringend dazu, diese Option aktiviert zu lassen. Um die adaptive Autovakuum-Parameterabstimmung zu deaktivieren, setzen Sie den rds.adaptive_autovacuum
Parameter jedoch auf 0 oder. OFF
Der Transaktions-ID-Wraparound ist auch dann noch möglich, wenn Amazon die RDS Autovacuum-Parameter abstimmt. Wir empfehlen Ihnen, einen CloudWatch Amazon-Alarm für den Transaktions-ID-Wraparound zu implementieren. Weitere Informationen finden Sie im Datenbank-Blog im Beitrag Implementieren eines Frühwarnsystems für Transaktions-ID-Wraparound RDS für Postgre SQL
Wenn die adaptive Einstellung der Autovakuum-Parameter aktiviert ist, RDS beginnt Amazon mit der Anpassung der Autovakuum-Parameter, sobald die CloudWatch Metrik den Wert des autovacuum_freeze_max_age
Parameters oder 500.000.000 MaximumUsedTransactionIDs
erreicht, je nachdem, welcher Wert größer ist.
Amazon passt die Parameter für Autovacuum RDS weiterhin an, wenn eine Tabelle weiterhin in Richtung Transaktions-ID-Wraparound tendiert. Jede dieser Anpassungen stellt weitere Ressourcen für die Selbstbereinigung bereit, um Wraparounds zu vermeiden. Amazon RDS aktualisiert die folgenden Autovakuum-bezogenen Parameter:
RDSändert diese Parameter nur, wenn der neue Wert das Autovakuieren aggressiver macht. Die Parameter werden im Arbeitsspeicher auf der DB-Instance geändert. Die Werte in der Parametergruppe werden nicht geändert. Verwenden Sie den Befehl Postgre, um die aktuellen In-Memory-Einstellungen anzuzeigen. SQL SHOW
Wenn Amazon einen dieser Autovacuum-Parameter RDS ändert, generiert es ein Ereignis für die betroffene DB-Instance. Dieses Ereignis ist im AWS Management Console und über den Amazon sichtbar RDSAPI. Wenn die MaximumUsedTransactionIDs
CloudWatch Metrik wieder unter den Schwellenwert fällt, RDS setzt Amazon die Autovakuum-bezogenen Parameter im Speicher auf die in der Parametergruppe angegebenen Werte zurück. Es generiert dann ein anderes Ereignis, das dieser Änderung entspricht.