WSPÓŁBIEŻNOŚĆ
br>
Zwana inaczej dostępem współdzielonym lub wielodostępem sieciowym – jest to jednoczesne przetwarzanie dzielonych zasobów przez więcej niż jeden proces.
br>
Przy tego typu przetwarzaniu danych może dochodzić do wielu problemów:
● Wycofanej modyfikacji (dirty reads)
Dotyczy odczytu danych zmodyfikowanych przez innego użytkownika, które zostaną ponownie zmodyfikowane.
● Utraconej modyfikacji (lost updates)
Dotyczy modyfikacji danych, a następnie nadpisywania tych samych danych przez innego użytkownika.
● Niepowtarzalnego odczytu (non-repeatable reads)
Dotyczy kilkukrotnego odczytu tych samych zatwierdzonych danych, ale za każdym razem te dane są inne.
● Fantomowego odczytu (phantoms)
Dotyczy wierszy dodanych, które wcześniej w transakcji nie były dostępne, a następnie się pojawią.
br>
br>
BLOKOWANIE
br>
SZBD zapewnia kontrolę współbieżności poprzez odpowiednie szeregowanie transakcji, czyli harmonogramowanie w taki sposób, aby były one wykonywane wydajnie i nie zaburzały spójności bazy.
Podstawową techniką, która jest wykorzystywana do tego celu, jest BLOKOWANIE na jednym z poziomów:
● na poziomie wiersza
● na poziomie strony
● na poziomie tabeli
● na poziomie zakresu.
br>
Rozróżniamy dwa podstawowe rodzaje blokad:
● blokada do odczytu (blokada dzielona)
proces uzyskuje dostęp do danych tylko z możliwością ich odczytu, nie może natomiast wprowadzać żadnych zmian
● blokada do zapisu (blokada wyłączna)
proces uzyskuje wyłączną możliwość odczytu i zapisu danych. Żaden inny proces nie może się do niego dostać.
br>
br>
POZIOMY IZOLACJI
br>
Ms SQL Server daje możliwość zmiany poziomów izolacji transakcji. Wpływają one na sposób blokowania danych.
● READ UNCOMMITTED
Transakcja Tran1 może odczytywać dane modyfikowane przez Tran2 jeszcze przed ich zatwierdzeniem.
Przetwarzanie tego typu jest stosunkowo szybkie, ale mogą wystąpić problemy utraconej modyfikacji lub wycofanej modyfikacji.
● READ COMMITTED
Jest to ustawienie domyślne Ms SQL Server’a.
Wprowadzane modyfikacje w transakcji Tran1 zakładają blokadę, która uniemożliwia przeglądanie danych w transakcji Tran2 do momentu zakończenia transakcji Tran1. Zapobiega to problemowi niepowtarzalnego odczytu.
● REPEATABLE READ
Transakcja Tran1 w czasie odczytu danych zakłada blokadę i utrzymuje ją do zakończenia transakcji.
Opcja ta zapobiega wprowadzaniu zmian danych przez inne transakcje.
Dzięki temu kilkakrotny odczyt daje takie same wyniki, natomiast do tabeli można dodawać i usuwać wiersze.
● SERIALIZABLE
Jest to najbardziej restrykcyjna opcja, która zakłada blokadę na cały zestaw wierszy.
Do czasu zakończenia transakcji Tran1 nie można: ani modyfikować, ani dodawać, ani usuwać żadnych danych.
Ten poziom izolacji zapewnia całkowitą bezbłędność współbieżnego działania transakcji, ale niestety wiąże się z obniżeniem wydajności przetwarzania danych.
● SNAPSHOT
Opcja ta zapisuje tzw. „migawki” danych, których transakcja będzie używała w kolejnych odniesieniach.
Chroni ona przed wszystkimi wspomnianymi wcześniej konfliktami.
Mechanizm ten działa na zasadzie wersjonowania wierszy.
br>
br>
SPOSÓB OBSŁUGI BLOKAD
br>
1). Każda transakcja chcąc uzyskać dostęp do określonych danych, musi je najpierw zablokować do odczytu lub do zapisu.
2). SZBD sprawdza, czy dany element jest już zwolniony przez inną transakcję, i jeśli tak, to nowa transakcja może uzyskać blokadę, natomiast jeżeli nie, to musi zaczekać na odblokowanie zasobu.
3). Transakcja trzyma blokadę do chwili zakończenia transakcji.
br>
br>
PLIKI DO ŚCIĄGNIĘCIA:
1. 005_Wspolbieznosc.sql
br>