Poziom izolacji transakcji określa, w jakim stopniu jedna transakcja jest odseparowana od zmian wykonywanych równocześnie przez inne transakcje. Jest to element właściwości ACID, dokładniej zasady izolacji.
Im wyższy poziom izolacji, tym mniej problemów współbieżności, ale zwykle większe blokady i niższa wydajność.
Typowe poziomy izolacji
- Read Uncommitted – dopuszcza odczyt danych niezatwierdzonych przez inne transakcje, czyli tzw. brudne odczyty.
- Read Committed – pozwala czytać tylko dane zatwierdzone, ale może wystąpić niepowtarzalny odczyt.
- Repeatable Read – gwarantuje, że ponowny odczyt tych samych wierszy zwróci te same wartości, ale mogą pojawić się nowe wiersze spełniające warunek zapytania, czyli odczyty widma.
- Serializable – najwyższy klasyczny poziom izolacji; zapobiega także odczytom widm.
Przykład problemu
Transakcja odczytuje listę zamówień klienta:
SELECT * FROM Zamowienia WHERE klient_id = 10;
W tym czasie inna transakcja dodaje nowe zamówienie tego klienta i zatwierdza zmianę. Przy kolejnym wykonaniu tego samego zapytania pierwsza transakcja może zobaczyć dodatkowy wiersz. To jest odczyt widmo.
Ważne na egzaminie
Poziom Repeatable Read chroni przed:
- brudnymi odczytami,
- niepowtarzalnymi odczytami.
Nie chroni jednak w pełni przed:
- odczytami widm.
Dlatego pytanie o Repeatable Read bardzo często wiąże się z odpowiedzią: odczyty widma.