KWALIFIKACJA INF3 - CZERWIEC 2023

PYTANIE NR 24.
Poziom izolacji transakcji Repeatable Read (tryb powtarzalnego odczytu) stosowany przez MS SQL wiąże się z problemem
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Poziom izolacji Repeatable Read zapobiega brudnym odczytom i niepowtarzalnym odczytom, bo wymusza utrzymanie blokad na odczytanych wierszach do końca transakcji. Nie gwarantuje jednak stałości całego zakresu danych, więc inna transakcja może dodać nowe pasujące wiersze. To daje problem odczytów widm.

Pełne wyjaśnienie:

W bazach danych poziom izolacji określa, jakie skutki współbieżnej pracy transakcji są dopuszczalne. Typowe anomalie to: brudne odczyty (odczyt niezatwierdzonych danych), niepowtarzalne odczyty (ten sam wiersz czytany dwa razy daje różne wartości) oraz odczyty widm (powtórzenie zapytania zwraca inny zestaw wierszy, bo pojawiły się nowe/ubyły wiersze spełniające warunek).

Izolacja Repeatable Read jest "silniejsza" niż Read Committed, ponieważ dąży do tego, aby dane raz odczytane w ramach transakcji nie zmieniły się przed jej zakończeniem. W praktyce (w modelu blokad) oznacza to utrzymanie blokad współdzielonych na odczytanych wierszach do końca transakcji, co:

  • eliminuje brudne odczyty – nie da się czytać niezatwierdzonych zmian,
  • eliminuje niepowtarzalne odczyty – odczytany wiersz nie może zostać w międzyczasie zmieniony przez inną transakcję w sposób, który zmieniłby wynik kolejnego odczytu tego samego wiersza.

Jednocześnie Repeatable Read nie musi blokować całych przedziałów (zakresów) spełniających warunki zapytania. To kluczowa różnica: nawet jeśli "stare" wiersze są stabilne, inna transakcja może wstawić nowy wiersz, który zacznie spełniać warunek wyszukiwania. Gdy pierwsza transakcja powtórzy zapytanie, zobaczy dodatkowy wiersz – to właśnie odczyt widma.

Dlatego odpowiedź "odczytów widm" jest trafna. Pozostałe propozycje są nietrafne, bo odnoszą się do zjawisk typowo blokowanych na tym poziomie (brudne i niepowtarzalne odczyty) albo do innego typu problemu (utrata aktualizacji), który zależy od wzorca zapisu i kontroli współbieżności, a nie jest standardowo utożsamiany jako "charakterystyczna" anomalia Repeatable Read.

Wskazówka egzaminacyjna: zapamiętaj różnicę między stabilnością wiersza (Repeatable Read) a stabilnością zakresu (Serializable). Widma wynikają właśnie z braku pełnej ochrony zakresu.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Poziom izolacji określa, jak silnie jedna transakcja jest "odseparowana" od innych, działających równolegle. Wpływa to na to, czy możliwe są anomalie odczytu, np. odczyt niezatwierdzonych danych, zmiana wartości tego samego wiersza lub pojawienie się nowych wierszy spełniających warunek zapytania.
Odczyt widma występuje, gdy w tej samej transakcji wykonasz dwa razy to samo zapytanie z warunkiem, a za drugim razem otrzymasz inny zestaw wierszy. Dzieje się tak, bo inna transakcja wstawiła/usunęła wiersze pasujące do warunku między Twoimi odczytami.
Niepowtarzalny odczyt dotyczy zmiany wartości tego samego wiersza między dwoma odczytami (UPDATE/DELETE). Odczyt widma dotyczy zmiany liczby wierszy spełniających warunek (np. pojawienie się nowego wiersza po INSERT), więc zmienia się wynik zapytania jako zbiór.
Tak, Repeatable Read nie dopuszcza brudnych odczytów, czyli czytania danych niezatwierdzonych przez inną transakcję. W praktyce oznacza to, że odczyt musi poczekać na zatwierdzenie/wycofanie zmian, aby nie pobrać wartości, które mogą nigdy nie zostać zapisane na stałe.
Tak, jego celem jest zapewnienie, że wiersze odczytane w transakcji nie zmienią się przed jej zakończeniem. Dzięki temu powtórny odczyt tych samych rekordów nie powinien zwrócić innych wartości. To odróżnia Repeatable Read od słabszych poziomów izolacji.
Bo Repeatable Read chroni głównie wiersze, które już zostały odczytane, ale nie zawsze blokuje cały zakres wartości spełniających warunek wyszukiwania. Inna transakcja może dodać nowy wiersz pasujący do warunku, a wtedy powtórzone zapytanie w tej samej transakcji zwróci dodatkowy rekord.
Serializable wybiera się wtedy, gdy trzeba mieć pewność, że w trakcie transakcji nie zmieni się nie tylko zawartość odczytanych wierszy, ale też zestaw wierszy spełniających warunki zapytań (czyli brak widm). Jest to ważne np. przy logice "sprawdź i wstaw", limitach, rezerwacjach i numeracji.
Utrata aktualizacji to sytuacja, gdy dwie transakcje modyfikują te same dane, a wynik jednej nadpisuje wynik drugiej, przez co jedna zmiana "znika". Zwykle wynika to z niewłaściwego wzorca odczyt-zapis lub braku mechanizmu wykrywania konfliktów, a nie z samej definicji jednej anomalii odczytu.
Szukaj opisu, w którym powtarzane jest to samo zapytanie z warunkiem (np. WHERE) i za drugim razem pojawiają się dodatkowe rekordy. Jeśli zmienia się liczba wierszy lub zakres wyników, to typowy sygnał widm. Jeśli zmienia się wartość w tym samym wierszu, to raczej niepowtarzalny odczyt.
W SQL Server można spotkać mechanizmy oparte o wersjonowanie wierszy (np. warianty "snapshot"), które zmieniają zachowanie odczytów i blokad. Na potrzeby teorii egzaminacyjnej warto jednak znać klasyczne anomalie i to, które poziomy izolacji je dopuszczają, a które mają je eliminować.
info

Około 57% zdających odpowiada poprawnie na to pytanie. średnie

Eksperci podkreślają: "Poziom izolacji Repeatable Read zapobiega brudnym odczytom i niepowtarzalnym odczytom, bo wymusza utrzymanie blokad na odczytanych wierszach do końca transakcji."

Źródła:

  • Microsoft Learn: "SET TRANSACTION ISOLATION LEVEL (Transact-SQL)" – opis poziomów izolacji i ich efektów, https://learn.microsoft.com/en-us/sql/t-sql/statements/set-transaction-isolation-level-transact-sql (dostęp 2026-02-28)
  • Microsoft Learn: "Transaction Locking and Row Versioning Guide" – zagadnienia blokad i współbieżności w SQL Server, https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide (dostęp 2026-02-28)
  • Wikipedia: "Isolation (database systems)" – definicje anomalii (dirty/non-repeatable/phantom), https://en.wikipedia.org/wiki/Isolation_(database_systems) (dostęp 2026-02-28)

Materiały:

  • Dokumentacja Microsoft Learn dotycząca poziomów izolacji transakcji w SQL Server
  • Rozdział o izolacji i współbieżności w podręczniku do baz danych (ACID, transakcje)
  • Ćwiczenia praktyczne: dwie sesje SQL i testowanie anomalii współbieżności (BEGIN TRAN, SELECT, INSERT)

Aktualizacja pytania: 03.04.2026



Aktualizacja pytania: 03.04.2026
📡 Brak połączenia internetowego