Wyjaśnienie przeznaczenia próżni i automatycznego czyszczenia
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, jest on oznaczany do przyszłego usunięcia, co skutkuje powstaniem "martwych" wierszy (lub krotek), które nadal są na dysku, ale nie są już potrzebne.
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 zostały na dysku, baza danych zajęłaby więcej miejsca niż to konieczne, co nazywa się "rozrostem 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 skanowania tylko indeksów .
- 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ż efektywność indeksów.
Gdy proces próżniowy jest wyzwalany automatycznie, proces jest znany jako autovacuum. 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 "nadmiaru", w tym większe niż wymagane bazy danych i tabele.
- Mają duże, nieoptymalne indeksy.
- Zwiększona wydajność 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