Ćwiczenia
> Transakcje w MS SQL Server 2000 > Poziomy izolacji transakcji |
![]() ![]() |
||
6.3 Poziomy izolacji transakcji![]() Problemem pojawiającym się przy pracy z bazami danych jest jednoczesny dostęp użytkowników do tych samych zbiorów danych. Z jednej strony nie można dopuścić do utraty spójności danych na skutek braku izolacji działań użytkowników, a z drugiej strony nie można dopuścić do sytuacji, w której operacja wykonywana przez jednego użytkownika blokuje na czas nieokreślony operacje wykonywane przez innych użytkowników. Jednym z postulatów ACID dotyczących transakcji jest izolacja. MS SQL Server daje do Twojej dyspozycji cztery poziomy izolacji transakcji. Zanim je poznasz, musisz dowiedzieć się, jakie problemy mogą wystąpić w pracy z transakcjami. Krok 1 - Poznaj problemy związane z konkurencją transakcjiKonkurencja transakcji to jednoczesne działanie wielu transakcji na tym samym zbiorze danych.Konkurencja niesie ze sobą szereg problemów. Problemy te to: stracone aktualizacje danych, niezapisane zależności (tzw. "brudne odczyty"), niespójna analiza (inaczej odczyt niepowtarzalny), odczyty - "zjawy". Stracone aktualizacje (ang. lost updates) to problem występujący, gdy wiele transakcji wybiera i zmienia rekord bazując na oryginalnej wartości pobranej. Ostatnia zmiana nadpisuje zmiany wprowadzone przez pozostałe transakcje. Niezapisana zależność (ang. uncommitted dependency) znana też jako "brudny odczyt" (ang. dirty read) to problem występujący, gdy transakcja wybiera (SELECT) wiersz w trakcie jego modyfikacji przez inną transakcję. Jeśli transakcja modyfikująca wiersz zostanie wycofana, transakcja pobierająca wiersz pobrała wartość, która tak naprawdę nigdy w bazie nie istniała. Niespójna analiza (ang. inconsistent analysis) lub niepowtarzalny odczyt (ang. nonrepeatable read) to problem występujący, gdy jedna transakcja czyta wiersz, podczas gdy inna ten wiersz modyfukuje (i zapisuje zmiany). Pierwsza transakcja za każdym odczytem pobiera inną wartość wiersza. Odczyty - "zjawy" (ang. phantom reads) to problem polegający na tym, że w trakcie czytania zestawu wierszy przez jedną transakcję, druga transakcja usunie lub doda wiersz do tego zestawu. Krok 2 - Poznaj poziomy izolacji transakcji w MS SQL ServerPomimo, że serializacja transakcji jest istotna, czyli pomimo istnienia postulatu izolacji, nie zawsze transakcje wymagają pełnej izolacji (a czasem jest ona nawet niewskazana). W MS SQL Server 2000 możliwe jest ustawienie czterech poziomów izolacji transakcji: read uncommitted, read committed , repeatable read, serializable. Poziomy te odpowiadają standardowi SQL-92.Poziom read uncommitted jest najnizszym poziomem izolacji transakcji. Umożliwia jednej transakcji czytanie zmian dokonywanych przez drugą transakcję jeszcze przed wykonaniem tej drugiej transakcji. Na tym poziomie izolacji nie sa ustawiane żadne blokady (ang. locks). Przy tak ustawionym poziomie izolacji trasnakcji występują wszystkie wymienione wcześniej problemy związane z konkurencją. Poziom read committed jest domyślnym poziomem izolacji transakcji w SQL Server. Modyfikacje dokonane przez jedną transakcję nie są widziane przez inną transakcję przed wykonaniem ostatecznym transakcji (COMMIT). Na tym poziomie izolacji nie ma problemów "brudnego odczytu", ale mogą pojawić się problemy niepowtarzalnego odczytu i odczytów - "zjaw". Trzecim w kolejności poziomem izolacji transakcji jest poziom repeatable read. Gdy wybrany jest ten poziom izolacji, podczas odczytu danych zakładane są blokady na czas trwania transakcji. Blokady te uniemożliwiają innym transakcjom modyfikację czytanych przez naszą transakcję danych. Powoduje to, że za każdym razem, gdy w transakcji odczytamy wybrany zbiór danych, nie ulegnie on zmianie. Użycie tego poziomu izolacji może spowodować blokowanie transakcji. Poziom ten chroni przed wystąpieniem problemów "brudnego odczytu" i niepowtarzalnego odczytu, ale nie uchroni nas przed wystąpieniem odczytów - "zjaw" (jedynie dostęp do istniejących danych jest blokowany). Najbardziej restrykcyjnym poziomem izolacji transakcji jest poziom serializable. Jest to poziom spełniający w pełni postulat izolacji transakcji. Na tym poziomie izolacji dane czytane przez jedną transakcję są całkowicie zablokowane dla innych transakcji na czas trwania transakcji. Krok 3 - Jak ustawić poziom transakcjiDla każdego połączenia możesz jawnie zmienić poziom izolacji transakcji używając polecenia SET TRANSACTION ISOLATION LEVEL. Poniżej podajemy wszystkie możliwe ustawienia poziomu izolacji transakcji.
Po ustawieniu poziomu transakcji będzie on obowiązywał dla danego połączenia aż do jawnego zadeklarowania innego poziomu izolacji (do następnego wywołania SET TRANSACTION ISOLATION LEVEL). Przejdź dalej ![]() |
|||
![]() Ćwiczenia > Transakcje w MS SQL Server 2000 > Poziomy izolacji transakcji |