0Pricing
SQL Academy · Lekcja

Poziomy izolacji: READ COMMITTED, REPEATABLE READ, SERIALIZABLE

Porównywać poziomy izolacji ze standardu SQL, ich implementację w PostgreSQL oraz wybierać właściwy poziom dla danego obciążenia

Poziomy izolacji: READ COMMITTED, REPEATABLE READ, SERIALIZABLE to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 2 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 SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Cztery standardowe poziomy

Standard SQL definiuje cztery poziomy izolacji:

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

PostgreSQL implementuje trzy z nich (READ UNCOMMITTED działa jak READ COMMITTED).

READ COMMITTED (domyślny w PostgreSQL)

Każda instrukcja widzi dane zatwierdzone przed jej rozpoczęciem. W ramach jednej transakcji mogą być widoczne różne migawki danych.

-- Inside one transaction:
SELECT balance FROM accounts WHERE id = 1;  -- 100
-- meanwhile another tx commits balance=200
SELECT balance FROM accounts WHERE id = 1;  -- 200  (non-repeatable read)

REPEATABLE READ (izolacja oparta na migawce)

Widoczna jest migawka utworzona na początku transakcji. Ponowny odczyt tego samego wiersza zawsze zwraca tę samą wartość. REPEATABLE READ w PostgreSQL zapobiega również odczytom fantomowym.

BEGIN ISOLATION LEVEL REPEATABLE READ;
SELECT balance FROM accounts WHERE id = 1;  -- 100
-- another tx commits balance=200
SELECT balance FROM accounts WHERE id = 1;  -- still 100
COMMIT;

SERIALIZABLE

Najsilniejszy poziom: transakcje zachowują się tak, jakby były wykonywane jedna po drugiej. PostgreSQL używa Serializable Snapshot Isolation (SSI) — wykrywa współbieżne zależności i przerywa konfliktujące transakcje:

BEGIN ISOLATION LEVEL SERIALIZABLE;
...
COMMIT;
-- ERROR: could not serialize access due to read/write dependencies

Ustawianie poziomu izolacji

Dla pojedynczej transakcji, sesji albo globalnie:

-- Per transaction:
BEGIN ISOLATION LEVEL SERIALIZABLE;

-- Per session:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

-- Default for new transactions in this session:
SET default_transaction_isolation = 'repeatable read';

-- Global default in postgresql.conf:
-- default_transaction_isolation = 'read committed'

Anomalie dopuszczalne na poszczególnych poziomach

PoziomBrudnyNiepowtarzalnyFantomowy
READ UNCOMMITTEDmożemożemoże
READ COMMITTEDniemożemoże
REPEATABLE READnienienie (w PG)
SERIALIZABLEnienienie

Kompromisy wydajnościowe

  • READ COMMITTED — minimalny narzut, poziom domyślny
  • REPEATABLE READ — ten sam plan, spójność migawki, brak wpływu na wydajność, chyba że wystąpią konflikty zapisu
  • SERIALIZABLE — dodatkowe śledzenie zależności, możliwość przerwania transakcji; aplikacja musi mieć mechanizm ponawiania prób

Wzorzec ponawiania dla SERIALIZABLE

SERIALIZABLE może przerwać transakcję z kodem 40001. Należy ponawiać próbę w pętli:

for (let i = 0; i < 3; i++) {
  try {
    await client.query('BEGIN ISOLATION LEVEL SERIALIZABLE');
    // ... work ...
    await client.query('COMMIT');
    break;
  } catch (e) {
    if (e.code === '40001') continue;
    throw e;
  }
}

Odczyt spójnej migawki

W przypadku długotrwałych zapytań analitycznych, które wymagają spójnych danych, REPEATABLE READ zapewnia właściwy kompromis.

Zachowanie w przypadku konfliktu zapisu

Jeśli dwie transakcje modyfikują ten sam wiersz:

  • READ COMMITTED — druga transakcja czeka, następnie ponownie odczytuje nowy wiersz i próbuje ponownie
  • REPEATABLE READ — druga transakcja zostaje przerwana z komunikatem „could not serialize” — aplikacja musi ponowić próbę

Wybór właściwego poziomu

Praktyczne zasady:

  • OLTP — READ COMMITTED (domyślnie)
  • Raporty wymagające spójności — REPEATABLE READ
  • Pieniądze / zapasy — SERIALIZABLE + ponawianie prób LUB jawne blokady (FOR UPDATE)

Jawne blokady czasem lepsze niż izolacja

Często użycie SELECT ... FOR UPDATE przy READ COMMITTED jest prostsze niż SERIALIZABLE w przypadku pojedynczego często modyfikowanego wiersza.

Podsumowanie

Poziomy izolacji są kompromisem między bezpieczeństwem a współbieżnością.

  • READ COMMITTED jest poziomem domyślnym
  • REPEATABLE READ służy do spójnych odczytów
  • SERIALIZABLE zapewnia działanie „tak jak szeregowe” — wymaga mechanizmu ponawiania prób

Szybkie sprawdzenie

Jaki jest domyślny poziom izolacji w PostgreSQL?

Często zadawane pytania

Czy lekcja „Poziomy izolacji: READ COMMITTED, REPEATABLE READ, SERIALIZABLE” jest bezpłatna?

Tak — pełny tekst „Poziomy izolacji: READ COMMITTED, REPEATABLE READ, SERIALIZABLE” 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 SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Poziomy izolacji: READ COMMITTED, REPEATABLE READ, SERIALIZABLE”?

Porównywać poziomy izolacji ze standardu SQL, ich implementację w PostgreSQL oraz wybierać właściwy poziom dla danego obciążenia Ćwiczysz SQL Academy 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ąć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy 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 2 z 4.

Ile czasu zajmuje lekcja „Poziomy izolacji: READ COMMITTED, REPEATABLE READ, SERIALIZABLE”?

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 SQL Academy?

Tak. Każda lekcja SQL Academy 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. Właściwości ACID i anomalie
  2. Poziomy izolacji: READ COMMITTED, REPEATABLE READ, SERIALIZABLE
  3. Zakleszczenia: wykrywanie i unikanie
  4. Blokowanie optymistyczne a pesymistyczne
← Powrót do SQL Academy