Ich glaube nicht, dass Sie manuell staubsaugen müssen, es sei denn, Sie bemerken einen Leistungsabfall. Es wird jedoch dringend empfohlen, die Vakuum- und Autovakuumeinstellungen zu überprüfen und an Ihre Bedürfnisse anzupassen
Führen Sie diese Abfrage aus, um Ihre aktuellen Einstellungen anzuzeigen:
SELECT *
FROM pg_settings
WHERE name LIKE '%vacuum%'
Die meisten Felder sind selbsterklärend. Hier finden Sie jedoch eine Dokumentation:
https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html
Ich würde sagen, dass Ihr Ziel darin bestehen sollte, Autovakuum so zu konfigurieren, dass der Müll konsistent gereinigt wird. Führen Sie Autovakuum jedoch nicht ständig aus
Die wichtigsten Einstellungen sind:
- autovacuum_vacuum_scale_factor - Bestimmt den Prozentsatz der Tupel, die tot sein können, bevor eine Bereinigung ausgelöst wird. Standardwert = 0,2
- autovacuum_vacuum_threshold - Mindestanzahl von toten Tupeln, bevor die Bereinigung ausgelöst wird. Standardwert = 50
Threshold verhindert, dass der Bereinigungsprozess bei kleinen Tabellen zu oft ausgelöst wird.
Die Standardeinstellungen funktionieren einwandfrei, es sei denn, Sie haben sehr große Tabellen. Einfach ausgedrückt, wenn Sie einen Tisch mit 100 GB haben, werden Sie 20 GB Müll ansammeln, bevor der automatische Unterdruck ausgelöst wird. Daher empfehle ich normalerweise, den Skalierungsfaktor niedrig einzustellen. Wie niedrig sollten Sie selbst bestimmen? Ich benutze 0.05 für mein aktuelles Projekt
Schwellenwerte können ebenfalls erhöht werden. Viele Anwendungen haben ein paar Tabellen, die häufig aktualisiert werden, und 50 Tupel sind nicht so viel. Eine Erhöhung auf 1000 sollte zu keinem Problem führen, aber Sie sollten natürlich Ihren eigenen Fall in Betracht ziehen
Sie können auch das automatische Vakuum fein einstellen und für einige Ihrer Tabellen unterschiedliche Einstellungen vornehmen
ALTER TABLE your_table SET (autovacuum_vacuum_scale_factor = 0.05);
Wenn Sie scale_factor und thresholds konfigurieren, sollten Sie in Ordnung sein. Sie können auch eine Erhöhung vornehmen autovacuum_vacuum_cost_limit
, die standardmäßig vacuum_cost_limit
200 entspricht. Dies ist eine sehr wichtige Funktion von Vacuum, mit der nicht alle Ressourcen aufgebraucht werden und die es Ihrer Anwendung ermöglicht, auch während des Staubsaugens mit Daten zu arbeiten , aber der Standardwert ist zu niedrig. Eine Erhöhung auf 1000 sollte keine nennenswerten Verzögerungen zur Folge haben, ermöglicht jedoch eine viel schnellere Beendigung des Vakuumprozesses
Natürlich können Sie das Vakuum auch manuell ausführen. Im einfachsten Fall können Sie einen einfachen Cron-Job ausführen, der jede Nacht eine vollständige Bereinigung durchführt, wenn nicht häufig auf Ihre Datenbank zugegriffen wird
Ich hoffe, das hilft!