Przejdź do głównej treści
eLearner.app
Moduł 11 · Lekcja 4 z 444/57 w kursie~12 min
Lekcje modułu (4/4)

Poziomy izolacji

Poza wyraźnym FOR UPDATE, transakcje mają również wrodzone reguły matematyczne wbudowane głęboko w silnik, które regulują, ile energii należy wydać, domyślnie izolując każdą indywidualną interakcję. Nazywa się to poziomem izolacji. W świecie SQL znamy 4 standardowe, według mocy i bezpieczeństwa, ale oczywiście odwrotnie, jeśli chodzi o wydajność.

  • READ UNCOMMITTED: Anarchiczne szaleństwo, w Twojej transakcji zostaną uwzględnione wszystkie zmiany dokonane przez innych, w tym tymczasowe dane od osób w połowie realizacji własnych skryptów. Nikt nie używa go na dużych bazach danych z powodu ciągłych błędów Dirty Read.
  • READ COMMITTED: (domyślny dla Postgres). Natychmiast zobaczysz nowe dane, gdy tylko strona trzecia wyda polecenie COMMIT, ale możesz paść ofiarą odczytów fantomowych (wyświetlanie nowych rekordów w połowie długich przepływów pracy) lub nieliniowego, spójnego widoku.
  • REPEATABLE READ: Cięższy. Na czas trwania twojej sesji z dużym oknem czasowym „widzę” bazę danych zawieszoną w momencie rozpoczęcia mojego zapytania, całkowicie ignorując i lekceważąc nawet oficjalne zatwierdzenia dokonane przez inne osoby! Chroni przed magicznie pojawiającymi się zapisami, gwarantując stabilność.
  • Poziom Boga SERIALIZABLE: (bardzo powolny). Traktuje każdą nakładającą się transakcję, blokując je i wykonując szeregowo w jednej linii, bezlitośnie przerywając te, które kolidują, eliminując u podstaw nawet naukową możliwość najmniejszej kolizji, poświęcając solidne 90% wysokiej przepustowości.

Jak to ustawić?

Zamiast normalnego BEGIN; wpisujesz:

SQL
BEGIN ISOLATION LEVEL SERIALIZABLE;

-- and you proceed normally with your hermetically sealed isolation
UPDATE products SET stock = 10;
COMMIT;

Lub w niektórych wariantach i starszych silnikach przypisujesz go po uruchomieniu:

SQL
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Spróbuj sam

Ćwiczenie#sql.m11.l4.e1
Próby: 0Ładowanie...

Rozpocznij transakcję formalnie ustawiając poziom globalny na czas życia zapytania na REPEATABLE READ, aby utworzyć zamrożoną, chronioną wymianę. Pamiętaj, że na poziomie zapytania nie ma to żadnego sensu, chyba że nastąpi po nim coś innego, więc zamknij ją pustą za pomocą „COMMIT”.

Ładowanie edytora...
Pokaż wskazówkę

Otwórz za pomocą BEGIN ISOLATION LEVEL REPEATABLE READ; i zamknij za pomocą COMMIT;

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#sql.m11.l4.e2
Próby: 0Ładowanie...

Wypróbujmy szalony poziom serializacji i wstaw trochę fikcyjnych danych. Otwórz blok „SERIALIZABLE”. Zaktualizuj nazwę kategorii Id=2 do „Nuovo Nome Segreto”. Uruchom ostatnie atomowe, zatwierdzające zatwierdzenie.

Ładowanie edytora...
Pokaż wskazówkę

ROZPOCZNIJ POZIOM IZOLACJI SERIALIZOWALNY; AKTUALIZACJA kategorii SET name = 'Nuovo Nome Segreto' WHERE id = 2; COMMIT;

Rozwiązanie dostępne po 3 próbach