Język SQL: współbieżność

article-thumbnail

Cechy współbieżności

Współbieżność polega na wykonywaniu więcej niż jednego procesu w tym samym czasie. Dzięki temu mechanizmowi wielu użytkowników może w tym samym czasie korzystać z serwera bazodanowego. Konieczne jest odizolowanie transakcji wykonywanych przez użytkowników, aby każdy mógł pracować jako pojedynczy użytkownik.

W tym celu korzysta się z jednej z metod kontroli współbieżności: – modelu optymistycznego (zakładającego małe prawdopodobieństwo odczytu tych samych danych przez różnych użytkowników) lub modelu pesymistycznego (zakładającego występowanie konfliktów podczas odczytu i modyfikacji danych).

Problemy podczas użytkowania

W zależności od stopnia izolacji transakcji, na serwerze mogą występować następujące problemy:

  • Utrata aktualizacji – pojawia się, gdy dwie transakcje modyfikują te same dane. Transakcja, która zakończy się później, zmodyfikuje dane, usuwając zmiany dokonane przez transakcję, zakończoną wcześniej.
  • Brudne odczyty – występują, gdy jedna transakcja dokonuje zmian danych, a druga w tym czasie odczytuje te dane. W efekcie transakcja odczytuje dane, które nie zostały jeszcze zatwierdzone i mogą zostać wycofane.
  • Niepowtarzalne odczyty – występują, gdy powtórzenie w ramach transakcji tego samego odczytu daje inny wynik. Może to być spowodowane tym, że po pierwszym odczycie (a nie po zakończeniu transakcji) zostaną zdjęte blokady założone na odczytywane dane. Niezablokowane dane mogą zostać zmienione przez inne działania, a powtórne ich odczytanie da inny wynik.
  • Odczyty widma – mają miejsce, gdy pomiędzy dwoma odczytami tych samych danych w ramach jednej transakcji zmieni się liczba odczytywanych wierszy (na przykład w wyniku wykonania w międzyczasie instrukcji INSERT lub DELETE na tych danych).

Stopnie współbieżności

Istnieją cztery poziomy izolowania transakcji, które umożliwiają nam zmianę sposobu nakładania blokad przez serwer bazodanowy:

  • READ UNCOMMITED (odczyt niezatwierdzonych danych)— najniższy poziom, zezwala na czytanie niepotwierdzonych danych. Pozwala na brudne odczyty, niepowtarzalne odczyty i odczyty widma.
  • READ COMMITED – (odczyt zatwierdzonych danych)— aplikacja może odczytywać tylko potwierdzone dane. Właściwy poziom izolacji np. dla procedur raportujących, dla których istotnych jest chwilowy stan bazy danych. Pozwala na niepowtarzalne odczyty i odczyty widma.
  • REPEATABLE READ (powtarzalny odczyt) — blokuje dostęp do wszystkich odczytywanych danych. Właściwy poziom izolacji dla procedur odczytu i aktualizacji danych. Pozwala na odczyty widma.
  • SERIALIZABLE (tryb szeregowania)— blokuje dostęp do tabeli. Właściwy poziom izolacji dla procedur odczytu i aktualizacji danych. Chroni bazę danych przed wszystkimi możliwymi problemami podczas pracy z danymi.

Autor tekstu: Filip Kmiecik