Izolacja definiuje, jakie anomalie są dopuszczalne przy współbieżnych transakcjach (dirty/non-repeatable reads, phantoms). Wyższa izolacja daje większą poprawność, ale może zmniejszać współbieżność i wydajność.
Odpowiedź zaawansowana
Głębiej
Poziom izolacji określa, jak Twoja transakcja zachowuje się, gdy inne transakcje równolegle czytają/zapisują te same dane. To kompromis poprawność ↔ współbieżność.
Typowe anomalie:
**Dirty read**: odczyt niezacommitowanych danych.
**Non-repeatable read**: dwa odczyty tego samego wiersza dają inne wartości.
**Phantom read**: ponowne wykonanie zapytania zakresowego zwraca inny zestaw wierszy.
Typowe poziomy izolacji (koncepcyjnie):
`READ UNCOMMITTED` (dopuszcza dirty reads)
`READ COMMITTED` (bez dirty reads, możliwe non-repeatable/phantoms)
`REPEATABLE READ` (mocniejsze, zależy od DB/MVCC)
`SERIALIZABLE` (najmocniejsze, ale może abortować transakcje przy konfliktach)
Praktyka
Zacznij od domyślnego poziomu (często `READ COMMITTED`) i podnoś izolację tylko tam, gdzie jest to potrzebne.
Przy `SERIALIZABLE` przygotuj retry (serialization failures są normalne przy kontencji).
Typowe pułapki
Założenie, że identyczna izolacja działa tak samo w każdej bazie (implementacje się różnią).