PostgreSQL Performance & Query Optimization · Lekcja

Poznawanie MVCC i VACUUM

Poznaj Multi-Version Concurrency Control (MVCC) oraz kluczową rolę VACUUM w zapobieganiu nadmiernemu rozrostowi tabel.

Lekcja 1 z 411 kroki

Poznawanie MVCC i VACUUM to bezpłatna lekcja PostgreSQL Performance & Query Optimization na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PostgreSQL Performance & Query Optimization, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PostgreSQL Performance & Query Optimization zawiera 4 lekcji w sumie.

Poznaj MVCC: sprzymierzeniec współbieżności

Witaj w świecie podstaw PostgreSQL! Dzisiaj przyjrzymy się Multi-Version Concurrency Control (MVCC). To skomplikowana nazwa prostej, ale potężnej koncepcji.

MVCC to mechanizm, dzięki któremu PostgreSQL pozwala wielu użytkownikom lub aplikacjom jednocześnie uzyskiwać dostęp do danych i je modyfikować, bez wzajemnego zakłócania pracy. Można go porównać do kontrolera ruchu w bazie danych.

Dlaczego MVCC ma znaczenie dla wydajności

Wyobraź sobie bazę danych bez MVCC. Jeśli jeden użytkownik odczytuje wiersz, inny użytkownik próbujący zaktualizować ten sam wiersz musiałby czekać. Nazywa się to blokowaniem, a jego nadmiar może boleśnie spowolnić bazę danych.

MVCC rozwiązuje ten problem, zapewniając, że odczyty nie blokują zapisów, a zapisy nie blokują odczytów. Każdy otrzymuje własny spójny widok danych.

Wiersze mają wiele żyć

Istota MVCC tkwi w sposobie obsługi zmian. Gdy wykonujesz operację UPDATE lub DELETE na wierszu w PostgreSQL, baza danych nie nadpisuje ani nie usuwa od razu oryginalnych danych.

Zamiast tego tworzy nową wersję wiersza (w przypadku aktualizacji) albo po prostu oznacza istniejący wiersz jako „usunięty”, nie usuwając go fizycznie. Stara wersja pozostaje dostępna tymczasowo.

Wyświetlanie właściwych danych

Skąd PostgreSQL wie, którą wersję wiersza ma wyświetlić? Każda transakcja otrzymuje unikatowy identyfikator. Po utworzeniu wiersz otrzymuje wartość xmin (identyfikator transakcji tworzącej). Po jego „usunięciu” otrzymuje wartość xmax (identyfikator transakcji usuwającej).

  • Twoja transakcja widzi tylko wiersze zatwierdzone przed jej rozpoczęciem.
  • Pomija wiersze usunięte po jej rozpoczęciu.

Dzięki temu zawsze widzisz spójny migawkowy obraz danych.

Następstwa operacji UPDATE

Spójrzmy na prosty przykład pokazujący, jak polecenie UPDATE tworzy nowe wersje wierszy:

Najpierw utworzymy tabelę i wstawimy produkt:

CREATE TABLE products (
  id SERIAL PRIMARY KEY,
  name VARCHAR(100),
  price DECIMAL(10, 2)
);

INSERT INTO products (name, price) VALUES ('Laptop', 1200.00);

Aktualizacje tworzą martwe krotki

Gdy teraz zaktualizujemy cenę, PostgreSQL nie zmienia istniejącego wiersza. Zamiast tego oznacza starą wersję wiersza jako „martwą” i wstawia zupełnie nową wersję wiersza ze zaktualizowaną ceną.

Stara wersja jest teraz „martwą krotką” – nie jest już widoczna dla nowych transakcji, ale nadal zajmuje miejsce na dysku.

UPDATE products SET price = 1250.00 WHERE id = 1;

Ukryty problem: rozrost tabel

Z czasem, w wyniku wielu operacji UPDATE i DELETE, w tabelach może zgromadzić się wiele takich „martwych krotek”. Prowadzi to do rozrostu tabeli.

Rozrost tabeli oznacza, że pliki bazy danych są większe, niż jest to konieczne, zajmują więcej miejsca na dysku i mogą spowalniać zapytania, ponieważ z dysku trzeba odczytać więcej danych.

Czas na VACUUM!

Właśnie tutaj przydaje się polecenie VACUUM! Jego głównym zadaniem jest usuwanie tych martwych krotek. Działa jak osoba sprzątająca bazę danych, porządkując stare, nieużywane wersje danych.

VACUUM oznacza miejsce zajmowane przez martwe krotki jako możliwe do ponownego wykorzystania, udostępniając je nowym danym wstawianym do tabeli. Zapobiega to ciągłemu zwiększaniu rozmiaru tabeli i poprawia wydajność.

Jak VACUUM sprząta

Po uruchomieniu VACUUM PostgreSQL skanuje tabelę, identyfikuje martwe krotki i dodaje lokalizacje zajmowanego przez nie miejsca do „mapy wolnego miejsca”. Nie zmniejsza to od razu pliku tabeli na dysku, ale gwarantuje, że przyszłe operacje INSERT lub UPDATE będą mogły ponownie wykorzystać to miejsce.

Podstawowe polecenie VACUUM uruchamia się w następujący sposób:

-- Clean up the 'products' table
VACUUM products;

Sprawdzenie MVCC i VACUUM

Sprawdźmy, czy rozumieją Państwo rolę mechanizmów MVCC i VACUUM.

MVCC i VACUUM: najważniejsze informacje

Właśnie poznali Państwo dwa kluczowe pojęcia związane z PostgreSQL!

  • MVCC zapewnia wysoką współbieżność, umożliwiając istnienie wielu wersji danych.
  • Operacje UPDATE i DELETE tworzą martwe krotki.
  • Rozrost tabeli występuje, gdy martwe krotki się gromadzą i marnują miejsce.
  • Polecenie VACUUM usuwa martwe krotki, dzięki czemu zajmowane przez nie miejsce można ponownie wykorzystać, zapobiegając rozrostowi tabel.

Zrozumienie tych pojęć jest kluczowe dla utrzymania sprawnej i wydajnej bazy danych PostgreSQL!

Bezpłatny start

Ucz się SQL dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
22
Lekcje
88

Często zadawane pytania

Czy lekcja „Poznawanie MVCC i VACUUM” jest bezpłatna?

Tak — pełny tekst „Poznawanie MVCC i VACUUM” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PostgreSQL Performance & Query Optimization, przejdź na CoddyKit PRO. Kurs PostgreSQL Performance & Query Optimization zawiera 4 lekcji w sumie.

Co nauczysz się w „Poznawanie MVCC i VACUUM”?

Poznaj Multi-Version Concurrency Control (MVCC) oraz kluczową rolę VACUUM w zapobieganiu nadmiernemu rozrostowi tabel. Ćwiczysz PostgreSQL Performance & Query Optimization z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć PostgreSQL Performance & Query Optimization?

Nie wymagamy żadnego doświadczenia. PostgreSQL Performance & Query Optimization w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Poznawanie MVCC i VACUUM”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji PostgreSQL Performance & Query Optimization?

Tak. Każda lekcja PostgreSQL Performance & Query Optimization zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Poznawanie MVCC i VACUUM
  2. Konfiguracja i dostrajanie autovacuum
  3. Wpływ poziomów izolacji transakcji
  4. Zapobieganie przepełnieniu identyfikatorów transakcji
← Powrót do PostgreSQL Performance & Query Optimization