2010-01-24 9 views

Antwort

28

Datenbanken, die MVCC verwenden, um Transaktionen voneinander zu isolieren, müssen die Tabellen regelmäßig scannen, um veraltete Kopien von Zeilen zu löschen. Wenn eine Zeile in MVCC aktualisiert oder gelöscht wird, kann sie nicht sofort erneut verwendet werden, da möglicherweise aktive Transaktionen vorhanden sind, die die alte Version der Zeile weiterhin anzeigen können. Anstatt zu überprüfen, ob dies der Fall ist, was sehr kostspielig sein könnte, wird angenommen, dass alte Zeilen relevant bleiben. Der Prozess des Zurückforderns des Speicherplatzes wird aufgeschoben, bis die Tabelle abgesaugt ist, was abhängig von der Datenbank automatisch oder explizit initiiert werden kann.

0

Es ist sehr ähnlich, ein Dateisystem zu defragmentieren. Weitere Informationen über die PGSQL docs.

+2

Beim Defragmentieren geht es nicht darum, Speicherplatz zurückzugewinnen. Es geht darum, Daten neu zu ordnen, um die Fragmentierung zu reduzieren. –

1

'vacuumdb' ist in MySQL, SQLite und PostgreSQL. In Postgres identifiziert vacuumdb den von gelöschten Zeilen belegten Speicherplatz und katalogisiert ihn für die zukünftige Verwendung. 'vacuum full' führt eine umfassendere Untersuchung durch und verschiebt Aufzeichnungen in den neu geschaffenen Raum.

Verwandte Themen