Dylemat Dead Row: Postgres 13 Odkurzanie

Jan 16 2023
W bazie danych, podobnie jak w życiu, trochę konserwacji przechodzi długą drogę.
Odkurzanie to ważne zadanie konserwacyjne w PostgreSQL, które pomaga odzyskać miejsce i poprawić wydajność. W tym artykule omówimy, czym jest odkurzanie, dlaczego jest konieczne i jak je wykonać w PostgreSQL 13.
Zdjęcie autorstwa No Revisions na Unsplash

Odkurzanie to ważne zadanie konserwacyjne w PostgreSQL, które pomaga odzyskać miejsce i poprawić wydajność. W tym artykule omówimy, czym jest odkurzanie, dlaczego jest konieczne i jak je wykonać w PostgreSQL 13.

Co to jest odkurzanie w PostgreSQL?

Odkurzanie w PostgreSQL 13 to proces, który pomaga odzyskać miejsce i poprawić wydajność poprzez usunięcie martwych wierszy z tabel. W PostgreSQL, gdy wiersz jest usuwany lub aktualizowany, stara wersja wiersza nie jest natychmiast usuwana z tabeli. Zamiast tego jest oznaczany jako „martwy” i pozostawiany na miejscu do czasu wykonania operacji próżniowej. Operacja próżniowa skanuje stół i odzyskuje miejsce zajmowane przez te martwe rzędy.

Kiedy wiersz jest usuwany lub aktualizowany, PostgreSQL oznacza starą wersję wiersza jako „martwą”, zamiast fizycznie usuwać ją z tabeli. Ma to na celu zachowanie spójności w przypadku wycofania lub awarii. Jednak w miarę gromadzenia się coraz większej liczby martwych wierszy tabela staje się większa i trudniejsza do przeskanowania przez bazę danych, co może prowadzić do niskiej wydajności zapytań i zwiększonego wykorzystania miejsca na dysku.

Dlaczego odkurzanie jest konieczne?

Odkurzanie jest konieczne z kilku powodów:

Wydajność : w miarę gromadzenia się większej liczby martwych wierszy w tabeli tabela staje się większa i trudniejsza do przeskanowania przez bazę danych. Może to prowadzić do niskiej wydajności zapytania.

Przestrzeń : martwe wiersze mogą zajmować znaczną ilość miejsca, zwłaszcza w dużych tabelach. Odkurzanie odzyskuje to miejsce, co może pomóc zapobiec wyczerpaniu miejsca na dysku w bazie danych.

Indeksowanie : martwe wiersze mogą również wpływać na wydajność indeksów. Odkurzanie może pomóc poprawić wydajność indeksów, usuwając z nich martwe wiersze.

Istnieją dwa rodzaje odkurzania w PostgreSQL

Autovacuum : Jest to proces działający w tle, który uruchamia się automatycznie i okresowo odkurza stoły. Jest domyślnie włączony w PostgreSQL i można go skonfigurować za pomocą ustawień autovacuum_* w pliku postgresql.conf.

Próżnia ręczna : Jest to proces ręczny, który można wykonać za pomocą polecenia PRÓŻNI. Może być używany do odkurzania określonych tabel lub wszystkich tabel w bazie danych. Może być również używany do odkurzania stołu o określonej konfiguracji, takiej jak odkurzanie tylko wolnej przestrzeni, odkurzanie pełnego stołu, analiza próżni.

Należy zauważyć, że odkurzanie może wymagać dużej ilości zasobów i może powodować tymczasowe obniżenie wydajności podczas jego działania. Dlatego generalnie najlepiej jest zaplanować odkurzanie w okresach niskiej aktywności bazy danych, na przykład podczas okien konserwacyjnych lub w nocy.

Jak odkurzyć w PostgreSQL 13

W tym samouczku przejdziemy przez wszystkie etapy odkurzania w PostgreSQL 13.

Krok 1 : Połącz się z bazą danych

Aby rozpocząć, połącz się z bazą danych za pomocą narzędzia wiersza poleceń psql lub narzędzia GUI, takiego jak pgAdmin.

Krok 2 : Sprawdź stan tabeli

Przed odkurzaniem dobrze jest sprawdzić stan stołu, który chcesz odkurzyć. Możesz użyć polecenia \d, aby zobaczyć szczegóły tabeli, w tym liczbę martwych wierszy.

Krok 3 : Uruchom polecenie VACUUM

Aby odkurzyć określoną tabelę, możesz użyć polecenia VACUUM, po którym następuje nazwa tabeli. Na przykład, aby odkurzyć tabelę „pracownicy”, uruchom następujące polecenie.

VACUUM employees;

VACUUM;

Po odkurzeniu warto zaktualizować statystyki tabeli za pomocą polecenia ANALIZA. Zapewni to, że planista zapytań będzie miał dokładne informacje o tabeli, co może poprawić wydajność zapytań.

ANALYZE employees;

Gdy próżnia działa, możesz monitorować jej postęp, sprawdzając widok systemowy pg_stat_progress_vacuum. Ten widok pokazuje postęp wszystkich aktualnie uruchomionych odkurzaczy.

Krok 6 : Ponownie sprawdź stan tabeli

Po zakończeniu odkurzania dobrze jest ponownie sprawdzić stan tabeli za pomocą polecenia \d. Powinieneś zauważyć spadek liczby martwych wierszy i wzrost ilości wolnego miejsca.

Plusy i minusy odkurzania w PostgreSQL

Zalety :

Poprawia wydajność : Odkurzanie może poprawić wydajność zapytań, usuwając martwe wiersze i odzyskując miejsce.

Zmniejsza wykorzystanie miejsca na dysku : Odkurzanie może pomóc w zapobieganiu wyczerpania miejsca na dysku w bazie danych poprzez odzyskanie miejsca zajmowanego przez martwe wiersze.

Wady :

Zasobożerne : odkurzanie może być operacją zasobochłonną, szczególnie w przypadku dużych stołów. Może to spowodować tymczasowe pogorszenie wydajności podczas pracy odkurzacza.

Czasochłonne : Odkurzanie może zająć dużo czasu, zwłaszcza na dużych stołach.

Podsumowując, odkurzanie jest niezbędnym zadaniem konserwacyjnym w PostgreSQL, które pomaga odzyskać miejsce i poprawić wydajność. Wykonując czynności opisane w tym artykule, możesz łatwo odkurzyć tabele w PostgreSQL 13 i zapewnić płynne działanie bazy danych. Jednak ważne jest, aby rozważyć zalety i wady odkurzania przed kontynuowaniem.