Wyjaśnienie przeznaczenia próżni i automatycznego czyszczenia

Ukończone

Po zaktualizowaniu wiersza każda aktualizacja składa się z wstawiania i usuwania. Zmodyfikowane dane są wstawione, a stary wiersz jest usuwany. W usłudze PostgreSQL oryginalny wiersz jest zachowywany, aby transakcja mogła wycofać się, jeśli wystąpi problem. Zamiast usuwać oryginalny wiersz, zostanie on później oznaczony do usunięcia, co spowoduje usunięcie "martwych" wierszy (lub krotki), które są nadal na dysku, ale nie są już wymagane.

Trafnie nazwany proces opróżniania trwale usuwa te wiersze, odzyskując miejsce, które w przeciwnym razie można utracić i aktualizując statystyki.

Proces czyszczenia utraconych wierszy jest nazywany procesem próżniowym. Gdyby te wiersze były pozostawione na dysku, baza danych zajęłaby więcej miejsca na dysku, które jest wymagane, nazywane "wzdęciem bazy danych". Proces VACUUM jest ważny z następujących powodów:

  • Aby odzyskać miejsce na dysku zajmowane przez wiersze oznaczone do usunięcia.
  • Aby zaktualizować statystyki danych do użycia przez planistę zapytań.
  • Aby zaktualizować mapę widoczności, która przyspiesza skanowanie tylko do indeksu.
  • Aby chronić przed utratą starych danych z powodu zawijania identyfikatora transakcji.

Usługa PostgreSQL używa procesu nazywanego próżnią, aby trwale usunąć wiersze i odzyskać miejsce. Oprócz odzyskania miejsca, zapewnia również skuteczne indeksy.

Gdy proces próżniowy zostanie wyzwolony automatycznie, proces jest nazywany automatycznym czyszczeniem. Częstotliwość uruchamiania procesu zależy od ilości operacji aktualizacji i usuwania. Można również monitorować liczbę wierszy oznaczonych do usunięcia.

Okresowe uruchamianie procesu próżniowego gwarantuje, że nie:

  • Doświadczenie "wzdęcie", w tym większe niż wymagane bazy danych i tabele.
  • Mają duże, nieoptymalne indeksy.
  • Zwiększone doświadczenie we/wy.

Aby monitorować liczbę "martwych" wierszy w tabeli, możesz uruchomić zapytanie SELECT:

SELECT relname, n_dead_tup, n_live_tup
FROM pg_catalog.pg_stat_all_tables
ORDER BY n_dead_tup DESC;

Aby ręcznie uruchomić proces próżniowy, wpisz:

vacuum