Ich verwalte eine große Datenbank (einige Hundert Konzerte) mit Tabellen mit verschiedenen Rollen, von denen einige Millionen Datensätze enthalten. Einige Tabellen empfangen nur eine große Anzahl von Einfügungen und Löschungen, andere wenige Einfügungen und eine große Anzahl von Aktualisierungen.
Die Datenbank läuft unter PostgreSQL 8.4 auf einem Debian 6.0 amd64-System mit 16 Gigabyte RAM.
Die Frage ist manchmal Autovakuum-Prozess auf einem Tisch, dauert sehr lange (Tage) zu vervollständigen. Ich möchte ungefähr sagen können, wie viel Zeit ein bestimmter Vakuumbefehl in Anspruch nimmt, um entscheiden zu können, ob er abgebrochen werden soll oder nicht. Auch wenn es eine Fortschrittsanzeige für Vakuumoperationen nach dem Tod gäbe, wäre dies sehr hilfreich.
Bearbeiten:
Ich suche keine kugelsichere Lösung. Lediglich ein grober Hinweis auf die Anzahl der toten Tupel oder der erforderlichen E / A-Bytes reicht aus, um eine Entscheidung zu treffen. Es ist wirklich ärgerlich, keine Ahnung zu haben, wann VACUUM
es zu Ende geht.
Ich habe gesehen, dass pg_catalog.pg_stat_all_tables
eine Spalte für die Anzahl der toten Tupel hat. So ist es möglich, eine Schätzung zu haben, auch wenn dies bedeutet, dass man ANALYZE
vorher an den Tisch muss. Andererseits autovacuum_vacuum_threshold
und autovacuum_vacuum_scale_factor
Einstellungen alleine beweisen, dass postgres selbst etwas über das Ausmaß der Änderungen auf den Tischen weiß und es wahrscheinlich auch in die Hände des DBA legt.
Ich bin nicht sicher, welche Abfrage ausgeführt werden soll, da ich beim Ausführen VACUUM VERBOSE
sehe, dass nicht nur Tabellen, sondern auch Indizes für sie verarbeitet werden.