Konfigurieren von autovacuum-Serverparametern

Abgeschlossen

Der vacuum-Prozess wird mit den autovacuum-Serverparametern konfiguriert, mit denen Sie den vacuum-Prozess für Ihre Workload optimieren können. Wählen Sie im Azure-Portal Ihren Azure Database for PostgreSQL-Server aus, und klicken Sie im linken Menü auf Serverparameter. Geben Sie in der Suchleiste autovacuum ein. Alternativ können Sie SQL verwenden, um die Systemkatalogsichten abzufragen und die aktuelle Konfiguration von autovacuum mithilfe der folgenden Abfrage zu ermitteln.

SELECT *
FROM pg_settings 
WHERE "name" LIKE '%autovacuum%';
Parametername Standard BESCHREIBUNG
autovacuum EIN Aktiviert oder deaktiviert den autovacuum-Serverprozess. autovacuum sollte immer aktiviert sein.
autovacuum_analyze_scale_factor 0,1 Gibt einen Anteil der Tabelle an, der „autovacuum_vacuum_threshold“ bei der Entscheidung über das Auslösen eines vacuum-Vorgangs hinzugefügt wird. Beispielsweise steht der Wert 0,2 für 20 Prozent der Tabellengröße.
autovacuum_analyze_threshold 50 Die Anzahl der eingefügten, aktualisierten oder gelöschten Zeilen, die zum Auslösen des analyze-Prozesses für eine beliebige Tabelle erforderlich sind
autovacuum_freeze_max_age 200000000 Maximales Alter (in Transaktionen), bevor autovacuum in einer Tabelle ausgelöst wird, um einen Transaktions-ID-Wraparound zu verhindern
autovacuum_max_workers 3 Die maximale Anzahl von autovacuum-Prozessen, die gleichzeitig ausgeführt werden (außer autovacuum-Launcher)
autovacuum_multixact_freeze_max_age 400000000 Maximales Alter (in Multixact), bevor autovacuum in einer Tabelle ausgelöst wird, um einen Multixact-Wraparound zu verhindern
autovacuum_naptime 60 Sek. Die Verzögerung zwischen autovacuum-Prozessen in einer Datenbank. In jeder Runde untersucht der Daemon die Datenbank und gibt nach Bedarf VACUUM- und ANALYZE-Befehle für Tabellen in dieser Datenbank aus.
autovacuum_vacuum_cost_limit -1 Die maximalen Kosten für automatische vacuum-Vorgänge. Wenn –1 angegeben ist (der Standard), wird der normale vacuum_cost_limit-Wert verwendet. Bei mehreren Workern wird der Wert zwischen den ausgeführten autovacuum-Workern proportional aufgeteilt. Die Summe für jeden Worker kann den Wert dieser Variablen nicht überschreiten.
autovacuum_vacuum_insert_threshold 1.000 Die Anzahl der eingefügten Zeilen, die vacuum für eine beliebige Tabelle auslösen
autovacuum_vacuum_scale_factor 0.2 Wird mit autovacuum_vacuum_threshold verwendet Der Anteil einer Tabelle, der verwendet wird, um zu entscheiden, ob ein vacuum-Vorgang ausgelöst werden soll.
autovacuum_vacuum_threshold 50 Die Mindestanzahl aktualisierter, eingefügter oder gelöschter Zeilen, um einen vacuum-Vorgang für eine Tabelle auszulösen
autovacuum_vacuum_insert_scale_factor 0.2 Gibt einen Anteil der Tabellengröße an, der „autovacuum_vacuum_insert_threshold“ hinzugefügt werden soll, um den vacuum-Prozess auszulösen
autovacuum_work_mem –1 KB Der maximale Arbeitsspeicher, den jeder autovacuum-Prozess verwenden kann.
log_autovacuum_min_duration -1 Die Zeit in Millisekunden, die von autovacuum-Aktionen protokolliert wird

Der vacuum-Prozess sollte nicht zu häufig oder zu selten ausgeführt werden. Die optimale Häufigkeit hängt von der Workload ab. Testen Sie die einzelnen autovacuum-Parameter, um zu ermitteln, was für Ihre Arbeitsauslastung am besten geeignet ist. Die Kosten für den vacuum-Prozess umfassen Folgendes:

  • Datenseiten werden gesperrt, wenn der vacuum-Prozess ausgeführt wird.
  • Der vacuum-Prozess verbraucht Computezeit und Arbeitsspeicher.

Optimieren von vacuum auf Tabellenebene

In Azure Database for PostgreSQL können autovacuum-Parameter auf Tabellenebene festgelegt werden. Wenn einige Tabellen häufiger aktualisiert werden als andere, kann dies die Leistung verbessern. Beispiel für das Festlegen von autovacuum auf Tabellenebene:

ALTER TABLE mytable SET (autovacuum_vacuum_threshold = 1000);
​ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.1);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_limit = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_delay = 10);

Auf Tabellenebene ist autovacuum ein synchroner Prozess. Je größer der Prozentsatz der inaktiven Tupel in einer Tabelle ist, desto höher sind die „Kosten“ für den autovacuum-Prozess.

Bei Tabellen mit einer hohen Aktualisierungsrate sollten Sie die Tabelle in mehrere Tabellen aufteilen. Diese Aufteilung hilft, autovacuum zu parallelisieren und die „Kosten“ für einzelne Tabellen zu reduzieren. Sie können auch die Anzahl der parallelen autovacuum-Worker erhöhen.