{{:bazy_danych:6.3.pdf|:wersja PDF}}

Wprowadzenie współbieżności w dostępie do BD wymaga pewnych działań umożliwiających 
[[bazy_danych:transakcje#Poziomy izolacji ANSI|izolację sesji]] użytkowników.
W wyidealizowanym systemie każdy użytkownik powinien pracować na bazie danych tak jakby był jej jedynym użytkownikiem. Coraz większe zbliżanie się do tego wyidealizowanego obrazu powoduje znaczne zmniejszenie wydajności SZBD. Konieczny jest więc kompromis pomiędzy poziomem odizolowanie sesji użytkowników, a wydajnością bazy.

====== Blokady ======

Blokady polegają na ograniczeniu dostępu do danych innym instrukcjom do czasu wykonania  się transakcji blokującej.

Zakres ograniczenia dostępu zależy od rodzaju blokady:

  * blokada współdzielona – pozwala innym instrukcjom na odczytywanie danych, ale nie na ich zmianę

  * blokada wyłączna – uniemożliwia zarówno odczyt jak i modyfikacje danych

Blokady występują na dwa sposoby:

  * niejawnie – w trakcie stosowania transakcji

  * jawnie – poprzez jawne zablokowanie danych (wierszy, tabel). W celu zablokowania wiersza wykonuje się komendę: SELECT cols FROM table [where ] FOR UPDATE. Blokowanie tabeli następuje poprzez wydanie polecenia LOCK TABLE table.

====== Zakleszczenia ======

Zakleszczenia występują w momencie kiedy jedna transakcja blokuje drugą lub kilka transakcji blokuje się wzajemnie.

Przykładem może być sytuacja kiedy transakcja1 aktualizuje wiersz o id 1, następnie transakcja2 aktualizuje wiersz o id 2. Kolejną operacją jaką ma wykonać transakcja1 jest aktualizacja wiersza o id 2, natomiast transakcja2 ma aktualizować wiersz o id 1. W tym momencie pojawia się zakleszczenie, ponieważ ani transakcja1 nie może zaktualizować wiersza o id 2 (bo nie zakończyła się transakcja2), ani transakcja2 nie może zaktualizować wiersza o id 1 (bo nie zakończyła się transakcja1).

{{:bazy_danych:2n.png|:bazy_danych:2n.png}}

W celu zminimalizowania ryzyka zakleszczenia należy dbać o to żeby transakcje były jak najkrótsze i wykonywały się jak najszybciej.

