| Termin | Definicja |
|---|---|
| Blokady | Blokady to ogólne określenie mechanizmów kontroli dostępu do współdzielonych zasobów bazy danych podczas transakcji. Blokady jako mechanizm współbieżnościBlokady w bazie danych są mechanizmem kontroli dostępu do zasobów używanych przez równocześnie wykonywane transakcje. Zasobem może być pojedynczy wiersz, zakres wierszy, strona danych, tabela albo inny element zależny od silnika bazy danych. Jeżeli jedna transakcja modyfikuje dane, druga transakcja może zostać czasowo wstrzymana, aby nie odczytała wartości pośredniej albo nie nadpisała zmiany wykonanej przez pierwszą transakcję. Blokada jest związana z transakcją, czyli logicznym zestawem operacji zakończonym zatwierdzeniem commit albo wycofaniem rollback. Jej czas trwania zależy od rodzaju operacji, poziomu izolacji i implementacji konkretnego silnika. W wielu systemach blokady zapisu są utrzymywane co najmniej do zakończenia transakcji, ponieważ dopiero wtedy wiadomo, czy zmiana pozostanie trwała. Zbyt długie transakcje zwiększają prawdopodobieństwo oczekiwania innych operacji. Tryby zgodności i zakres blokowaniaNajczęściej rozróżnia się blokady współdzielone oraz wyłączne. Blokada współdzielona pozwala wielu transakcjom odczytywać ten sam zasób, o ile żadna z nich nie żąda dostępu wyłącznego. Blokada wyłączna jest używana przy modyfikacji danych i uniemożliwia innym transakcjom wykonanie operacji kolidujących z zapisem. Dokładne nazwy trybów, ich kompatybilność oraz zachowanie przy odczycie zależą od używanego systemu zarządzania bazą danych. Istotny jest także zakres blokady. Blokada wiersza może ograniczyć wpływ operacji do konkretnego rekordu, natomiast blokada tabeli może zablokować dostęp do znacznie większego zbioru danych. Nie każdy silnik zawsze utrzymuje blokadę na najdrobniejszym możliwym poziomie. Przy dużej liczbie blokowanych elementów może dojść do eskalacji, czyli zastąpienia wielu blokad szczegółowych jedną blokadą obejmującą większy zakres. Zmniejsza to narzut zarządzania, ale może ograniczyć współbieżność. Oczekiwanie, zakleszczenie i izolacja transakcjiJeżeli transakcja potrzebuje zasobu zablokowanego przez inną transakcję, przechodzi w stan oczekiwania. Samo oczekiwanie nie musi oznaczać awarii, ponieważ może zakończyć się po zatwierdzeniu lub wycofaniu transakcji, która posiada blokadę. Problem pojawia się wtedy, gdy transakcje wykonują operacje długo, pozostawiają otwarte połączenia albo pobierają zasoby w niekorzystnej kolejności. Zakleszczenie, nazywane także deadlockiem, występuje wtedy, gdy co najmniej dwie transakcje wzajemnie oczekują na zasoby zablokowane przez siebie. Przykładowo pierwsza transakcja może zablokować jeden wiersz i żądać drugiego, podczas gdy druga zablokowała drugi wiersz i żąda pierwszego. Silnik wykrywa taki cykl oczekiwania i zwykle wybiera jedną transakcję jako ofiarę, wycofując ją oraz zwalniając posiadane blokady. Aplikacja powinna być przygotowana na taki błąd i w uzasadnionych przypadkach ponowić całą transakcję, a nie tylko jej ostatnie polecenie. Blokady współdziałają z poziomem izolacji transakcji. Poziom izolacji określa, jakie skutki równoległych zmian mogą być widoczne dla odczytu. Słabsza izolacja może zmniejszyć liczbę oczekiwań, lecz pozwala na większą liczbę anomalii, takich jak odczyt niezatwierdzonych danych, ich ponowny odczyt z inną wartością albo pojawienie się dodatkowych wierszy spełniających to samo zapytanie. Wyższa izolacja ogranicza te zjawiska, ale może zwiększyć koszt blokowania lub wykorzystania mechanizmów wersjonowania. Rozpoznawanie blokad w działającej aplikacjiObjawem problemu z blokadami może być nagłe wydłużenie czasu zapytań, wzrost liczby aktywnych połączeń, przekroczenie limitu czasu albo sporadyczne wycofywanie transakcji. Sam komunikat o wolnym działaniu nie wystarcza jednak do rozpoznania przyczyny. Należy ustalić, które zapytanie czeka, jaki zasób jest zablokowany, która transakcja posiada blokadę oraz jak długo pozostaje aktywna. Podczas analizy sprawdza się między innymi czas rozpoczęcia transakcji, identyfikator sesji, tekst wykonywanego zapytania, oczekiwany typ blokady i zależności pomiędzy sesjami. Trzeba również przeanalizować plan wykonania oraz indeksy. Brak odpowiedniego indeksu może spowodować odczyt wielu wierszy zamiast szybkiego znalezienia właściwego rekordu, a to może wydłużyć czas utrzymywania blokad. Znaczenie mają także zapytania obejmujące dużą liczbę rekordów, operacje wykonywane w pętli oraz rozpoczęcie transakcji przed wykonaniem niezwiązanych z bazą czynności. Praktyczne ograniczanie problemów obejmuje skracanie transakcji, wykonywanie operacji na zasobach w jednolitej kolejności, dobór właściwych indeksów, unikanie niepotrzebnych odczytów w transakcji oraz prawidłowe zamykanie połączeń. Zmiana poziomu izolacji lub włączenie wersjonowania nie powinna być traktowana jako uniwersalne rozwiązanie, ponieważ może zmienić znaczenie odczytów i wymagania dotyczące spójności. Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów i komputerów PC, w tym diagnostyką problemów z oprogramowaniem oraz działaniem aplikacji bazodanowych na komputerach użytkowych. |