In einigen Fällen, und ein massiven nach der Herstellung update
, insert
oder delete
aus einer Tabelle, habe ich begonnen , ein VACUUM FULL ANALYZE
zu aufgebläht , um sicherzustellen , dass die DB nicht immer. Wenn ich es in einer Produktionsdatenbank mache, habe ich festgestellt, dass dies keine gute Idee war, da ich die Tabelle für einen langen Zeitraum blockieren konnte. Also habe ich den Vorgang abgebrochen, vielleicht nur versucht VACUUM
(nicht voll) oder AUTOVACUUM
später alles tun lassen , was es kann.
Die Frage ist: Wenn ich ein VACUUM oder AUTOVACUUM "auf halbem Weg" stoppe, geht dann die gesamte Verarbeitung bereits verloren?
Wenn zum Beispiel VACUUM
bereits 1 M tote Reihen gefunden wurden und ich sie stoppe, gehen all diese Informationen verloren? Funktioniert VACUUM vollständig transaktional ("alles oder nichts", wie eine sehr gute Anzahl von PostgreSQL-Prozessen)?
Wenn VACUUM sicher unterbrochen werden kann, ohne dass die gesamte Arbeit verloren geht, gibt es eine Möglichkeit, die vacuum
Arbeit schrittweise auszuführen ? [100 ms arbeiten, anhalten, 10 ms warten, damit der Rest der Welt nicht blockiert wird ... und so weiter]. Ich weiß, dass Sie einen Teil davon tun können, indem Sie die Autovakuumparameter einstellen, aber ich denke, dass ich dies programmgesteuert steuern kann, um dies zu bestimmten Zeiten / unter bestimmten Bedingungen tun zu können.
HINWEIS: Stoppen / Abbrechen / Beenden des Prozesses bedeutet in diesem Zusammenhang:
- Wenn Sie pgAdmin verwenden, klicken Sie auf die Schaltfläche "Abfrage abbrechen".
- Wenn Sie programmgesteuert arbeiten, rufen Sie pg_cancel_backend () auf.
Ich gehe davon aus, dass beide gleichwertig sind. Ich habe keinen Kill-Befehl auf Shell- / Systemebene verwendet.
quelle
vacuum_cost_page_hit
undvacuum_cost_page_miss
auf Null.