| Termin | Definicja |
|---|---|
| Zarządzanie konfliktem blokad | Zarządzanie konfliktem blokad obejmuje analizę i optymalizację transakcji wzajemnie się blokujących. Na czym polega konflikt blokadZarządzanie konfliktem blokad dotyczy sytuacji, w której kilka transakcji jednocześnie korzysta z tych samych danych, a co najmniej jedna z nich musi poczekać na zwolnienie zasobu. Blokada jest mechanizmem kontroli współbieżności: chroni rekord, zakres rekordów, stronę danych, obiekt tabeli albo inny zasób przed równoczesną operacją, która mogłaby naruszyć spójność wyniku. Konflikt nie oznacza automatycznie awarii. Krótkie oczekiwanie może być prawidłowym skutkiem pracy wielu użytkowników, natomiast długie oczekiwanie wskazuje na niewłaściwy czas trwania transakcji, zbyt szeroki zakres blokady, brak odpowiedniego indeksu albo niekorzystną kolejność dostępu do danych. W praktyce trzeba odróżnić zwykłe blokowanie od zakleszczenia. W zwykłym konflikcie jedna transakcja posiada blokadę, a druga oczekuje na jej zwolnienie; po zatwierdzeniu lub wycofaniu pierwszej operacja oczekująca może być kontynuowana. Zakleszczenie powstaje wtedy, gdy transakcje tworzą cykl zależności. Przykładowo transakcja A blokuje rekord X i czeka na rekord Y, podczas gdy transakcja B blokuje rekord Y i czeka na rekord X. Żadna z nich nie może zakończyć pracy bez przerwania drugiej, dlatego silnik musi wykryć cykl i wycofać co najmniej jedną transakcję. Źródła oczekiwania i zakleszczeńJedną z najczęstszych przyczyn konfliktów jest zbyt długo otwarta transakcja. Jeżeli aplikacja rozpoczyna transakcję przed wykonaniem operacji niezwiązanych z bazą, a następnie utrzymuje ją podczas oczekiwania na odpowiedź użytkownika, połączenie z zewnętrzną usługą lub zapis pliku, blokady mogą pozostawać aktywne znacznie dłużej, niż wymaga tego sama modyfikacja danych. Dodatkowym problemem są błędy obsługi wyjątków, przez które transakcja nie zostaje zatwierdzona ani wycofana, lecz nadal zajmuje zasoby do czasu przerwania połączenia. Konflikty nasilają się także przy niejednolitej kolejności aktualizacji. Jeżeli jeden fragment programu modyfikuje najpierw wiersz klienta, a potem wiersz zamówienia, natomiast drugi wykonuje te czynności w odwrotnej kolejności, powstaje ryzyko zakleszczenia. Znaczenie ma również plan wykonania zapytania. Brak indeksu dla warunku wyszukiwania może spowodować odczyt wielu wierszy i objęcie blokadą większego obszaru niż zamierzony. W systemach, które blokują zakresy lub strony danych, zapytanie zwracające niewielką liczbę wyników może mimo to powodować szerokie oczekiwanie, jeśli filtr nie jest obsługiwany przez właściwą strukturę indeksową. Do diagnostyki potrzebne są co najmniej identyfikatory sesji, czas rozpoczęcia transakcji, typ posiadanej i żądanej blokady, nazwa zasobu oraz tekst lub plan wykonywanego zapytania. Sam komunikat o przekroczeniu czasu oczekiwania nie wskazuje jeszcze winnego. Należy ustalić, która sesja utrzymuje blokadę, jakie dane zmienia i dlaczego nie zakończyła transakcji. Warto analizować także częstotliwość powtarzania konfliktów, czas ich trwania oraz to, czy dotyczą tych samych tabel, indeksów lub operacji. Metody ograniczania problemuPodstawową metodą jest skracanie transakcji do najmniejszego bezpiecznego zakresu. Operacje obliczeniowe, komunikacja z użytkownikiem, żądania sieciowe i praca na plikach powinny odbywać się poza sekcją, w której utrzymywane są blokady. Modyfikacje powinny być wykonywane w przewidywalnej kolejności, a po zakończeniu zapisu transakcja powinna zostać niezwłocznie zatwierdzona. Kod musi również obsługiwać wycofanie po błędzie, ponieważ pozostawienie częściowo wykonanej operacji bez jednoznacznego zakończenia utrudnia odzyskanie zasobów i może prowadzić do kaskady oczekujących sesji. Pomocne jest projektowanie operacji tak, aby każda transakcja pozyskiwała zasoby w tej samej kolejności. Przy masowych aktualizacjach można dzielić pracę na mniejsze porcje, ograniczając czas pojedynczego przetrzymania blokad. Indeksy należy dobierać na podstawie rzeczywistych warunków wyszukiwania i planów zapytań, ponieważ sam fakt istnienia indeksu nie gwarantuje jego użycia. Trzeba też unikać niepotrzebnych odczytów i modyfikacji, zwłaszcza aktualizowania rekordów, których wartości faktycznie się nie zmieniają. Warstwa aplikacji powinna traktować wykryte zakleszczenie jako błąd możliwy do ponowienia, ale ponawiać operację tylko po upewnieniu się, że transakcja została całkowicie wycofana. Ponowienie powinno mieć ograniczoną liczbę prób oraz opóźnienie, najlepiej rosnące między kolejnymi próbami. Nie wolno bezwarunkowo ponawiać każdego błędu blokady, ponieważ przyczyną może być trwałe przekroczenie limitu czasu, błąd logiki albo niedostępność zasobu. Równolegle należy ustalić przyczynę źródłową, gdyż sam mechanizm retry jedynie zmniejsza widoczność problemu. Diagnostyka i serwisowanie komputerówOcena konfliktów blokad wymaga sprawdzenia zarówno kodu aplikacji, jak i zachowania silnika bazy danych. Przydatne są dzienniki zakleszczeń, zestawienia aktywnych transakcji, pomiary czasu oczekiwania oraz korelacja zdarzeń z obciążeniem procesora, pamięci masowej i sieci. Należy porównać moment wystąpienia konfliktu z wdrożeniami nowych wersji aplikacji, zmianami indeksów, wzrostem liczby użytkowników oraz zadaniami wykonywanymi cyklicznie. Jeżeli problem pojawia się wyłącznie na jednym komputerze, warto dodatkowo sprawdzić opóźnienia połączenia, stan dysku, błędy systemowe i poprawność konfiguracji klienta. Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC oraz podzespołów, które mogą wpływać na stabilność pracy aplikacji i narzędzi diagnostycznych. W przypadku stanowiska serwisowego można sprawdzić temperatury, pamięć operacyjną, kondycję dysku, sterowniki i komunikację sieciową, a następnie oddzielić problem sprzętowy od błędu w kodzie lub konfiguracji systemu bazodanowego. |