BD-1st-2.4-lab9.tresc-1.1-Slajd20
Zakleszczenie w bazie danych
Poważnym problemem, występującym w bazach danych ze zbiorem współbieżnych transakcji, jest możliwość wystąpienia zakleszczenia. Zakleszczenie to sytuacja, w której aktywne transakcje nie mogą zakończyć swojego działania, gdyż nawzajem blokują sobie zasoby (rekordy i relacje). Zanalizujmy zaprezentowany przykład. Zakładamy, że użytkownicy ALA i OLEK przyznali sobie nawzajem prawa odczytu, modyfikacji i usuwania rekordów ze swoich relacji PRACOWNICY i ZESPOLY.
Użytkownik OLEK rozpoczął swoją transakcję, oznaczmy ją jako transakcja 1, w niej wykonuje pierwsze polecenie, które modyfikuje wartość płacy podstawowej w rekordzie relacji PRACOWNICY ze schematy użytkownika ALA, opisującym pracownika o identyfikatorze 200. Przed modyfikacją rekord zostaje zablokowany w trybie wyłącznym przez transakcję 1. W międzyczasie użytkownik ALA rozpoczął swoją transakcję, oznaczmy ją jako transakcja 2, w pierwszym poleceniu zmodyfikował wartość atrybutu ADRES relacji ZESPOLY ze schematu użytkownika OLEK w rekordzie opisującym zespół o nazwie ALGORYTMY. Rekord zostaje zablokowany przez transakcję 2. Użytkownik OLEK w swojej transakcji 1 kontynuuje pracę i próbuje zmodyfikować adres zespołu o nazwie ALGORYTMY w swojej własnej relacji ZESPOLY. Jednak transakcja nie może uzyskać blokady – rekord został wcześniej zablokowany przez transakcję 2. Transakcja 1 zostaje zawieszona, czekając na zwolnienie blokady.
Ciąg dalszy na następnym slajdzie.