Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Co to jest VACUUM w PostgreSQL?

Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
W PostgreSQL istnieje mechanizm MVCC (więcej szczegółów poniżej) - wielowersyjność wierszy. Gdy aktualizujesz lub usuwasz dane, stare wersje wierszy nie znikają od razu. Pozostają w plikach tabel jako "martwy ładunek". Z czasem takich wierszy przybywa, tabele się rozrastają, indeksy tracą efektywność, a zapytania zaczynają działać wolniej.
Aby utrzymać bazę w zdrowym stanie, PostgreSQL wykorzystuje proces VACUUM. Usuwa on nieużywane wersje wierszy, zwalnia przestrzeń i pomaga aktualizować statystyki dla planera zapytań. To swoiste sprzątanie, które zazwyczaj nie wymaga ręcznego uruchamiania, ponieważ zazwyczaj działa automatyczny autovacuum.
Istnieje również VACUUM FULL - bardziej radykalna wersja. Nie tylko oczyszcza "śmieci", ale także fizycznie przebudowuje tabelę, zwracając miejsce systemowi plików. Cena - całkowite zablokowanie tabeli na czas operacji. Dlatego FULL używa się rzadko i głównie w nocnych oknach lub po masowych usunięciach.
Bez VACUUM PostgreSQL stopniowo degraduje: tabele rosną, indeksy tracą dokładność, zapytania stają się wolne, a autovacuum może zacząć działać zbyt agresywnie. Dlatego VACUUM - to nie tylko techniczne narzędzie, ale podstawowy mechanizm, który pozwala PostgreSQL utrzymywać wydajność przez długie lata.

MVCC (Multi-Version Concurrency Control) 

MVCC (Multi-Version Concurrency Control) - to sposób, w jaki PostgreSQL i inne systemy baz danych pozwalają wielu klientom jednocześnie czytać i zmieniać dane bez blokad, które paraliżują pracę.
W zwykłych bazach danych bez MVCC jednoczesne zapisy i odczyty mogą powodować konflikty. MVCC rozwiązuje to w ten sposób: gdy aktualizujesz wiersz, baza nie nadpisuje go na starym, lecz tworzy nową wersję. Stara pozostaje dostępna dla tych transakcji, które ją jeszcze "widzą". Każda transakcja działa z własnym zrzutem danych, nie przeszkadzając innym.
Zaletą jest prosta - czytelnicy nie blokują zapisu, a zapis nie blokuje czytelników. Dlatego PostgreSQL może obsługiwać dużą liczbę równoległych operacji bez istotnych opóźnień.
Wada jest również oczywista - stare wersje się kumulują. I to właśnie VACUUM odpowiada za to, aby te "martwe" wiersze usuwać i utrzymywać bazę w czystym stanie.

Ten post nie ma jeszcze żadnych dodatków od autora.

Zmienne w Ruby: @, @@ oraz zmienna instancji klasy
30 paź 20:54

Zmienne w Ruby: @, @@ oraz zmienna instancji klasy

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Różnica między blank?, present?, empty? a nil? w Ruby
30 paź 21:06

Różnica między blank?, present?, empty? a nil? w Ruby

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest Middleware w Ruby on Rails i kiedy jest używane
4 lis 10:39

Czym jest Middleware w Ruby on Rails i kiedy jest używane

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest podejście Vanilla Rails?
14 lis 16:48

Czym jest podejście Vanilla Rails?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest Elasticsearch i jak działa?
22 lis 12:35

Czym jest Elasticsearch i jak działa?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest baza danych typu time-series?
22 lis 12:42

Czym jest baza danych typu time-series?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest B-Tree (drzewo zrównoważone)?
22 lis 12:58

Czym jest B-Tree (drzewo zrównoważone)?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Fix problem with installing Ruby 3.4.3 (and not only) via RVM on macOS (Apple Silicon)
30 gru 14:05

Fix problem with installing Ruby 3.4.3 (and not only) via RVM on macOS (Apple Silicon)

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Problem Grzmiącego Stada: co to jest i dlaczego łamie produkcję
15 sty 10:14

Problem Grzmiącego Stada: co to jest i dlaczego łamie produkcję

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest Exponential Backoff i Random Jitter?
15 sty 15:24

Czym jest Exponential Backoff i Random Jitter?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Podłączenie usługi Elasticsearch do aplikacji Rails (Coolify w chmurze, serwer na Hetzner).
15 lut 13:45

Podłączenie usługi Elasticsearch do aplikacji Rails (Coolify w chmurze, serwer na Hetzner).

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
„Brak miejsca na urządzeniu” - kiedy Docker zjadł cały dysk
15 lut 19:57

„Brak miejsca na urządzeniu” - kiedy Docker zjadł cały dysk

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska