Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Procedura z blokadą

Termin Definicja
Procedura z blokadą

Procedura z blokadą jawną kontroluje dostęp do zasobu przez polecenie takie jak sp_getapplock.

Procedura z blokadą — czym jest kontrola dostępu do zasobu

Procedura z blokadą to sposób organizowania pracy systemu, w którym wykonanie określonego działania zostaje czasowo zatrzymane do chwili spełnienia warunku bezpieczeństwa lub zakończenia operacji prowadzonej przez inny proces. Zasób może oznaczać tabelę, zestaw rekordów, fragment danych, zadanie biznesowe, dokument albo logiczny obszar aplikacji. Istotą rozwiązania jest jawne zarezerwowanie nazwanego zasobu oraz przekazanie systemowi informacji, że dostęp powinien zostać ograniczony, opóźniony albo odrzucony.

W bazach danych blokada nie musi być wyłącznie skutkiem modyfikowania wiersza. Może zostać ustanowiona świadomie jako blokada aplikacyjna, niezależna od standardowego mechanizmu blokowania rekordów. Przykładem jest procedura wykorzystująca polecenie sp_getapplock w Microsoft SQL Server. Nazwa zasobu jest wtedy ustalana przez aplikację, a nie wynika bezpośrednio z adresu konkretnego wiersza czy strony danych. Dzięki temu można kontrolować dostęp do operacji, która obejmuje wiele tabel lub kilka kolejnych etapów.

Blokada jawna nie jest tym samym co ukryte oczekiwanie na zwolnienie zasobu. Powinna mieć określony cel, właściciela, tryb działania oraz czas życia. W przeciwnym razie może powstać sytuacja, w której jedna transakcja oczekuje na drugą, a użytkownik nie otrzymuje czytelnej informacji o przyczynie opóźnienia. Dobrze zaprojektowana procedura opisuje także reakcję na niepowodzenie: przerwanie działania, ponowienie próby, zapisanie zdarzenia lub przekazanie komunikatu do warstwy aplikacyjnej.

Procedura z blokadą w kontekście transakcji i współbieżności

Współbieżność oznacza możliwość wykonywania wielu operacji w tym samym czasie. Jest korzystna dla wydajności, lecz stwarza ryzyko konfliktów. Dwa żądania mogą próbować zmienić ten sam stan, zarezerwować ten sam numer, uruchomić identyczne rozliczenie albo przetworzyć jeden dokument jako pierwszy. Bez dodatkowej kontroli wynik może zależeć od kolejności wykonania, która nie zawsze jest przewidywalna.

Procedura z blokadą wprowadza regułę porządkującą. Pierwszy proces uzyskuje prawo do wykonania chronionej operacji, a kolejne procesy czekają lub kończą się błędem zgodnie z przyjętą konfiguracją. W przypadku sp_getapplock można wskazać nazwę zasobu oraz tryb blokady, na przykład współdzielony albo wyłączny. Tryb współdzielony dopuszcza równoległy dostęp kilku wykonujących procesów, gdy operacja nie zmienia chronionego stanu. Tryb wyłączny pozwala na wejście tylko jednego właściciela, co jest właściwe przy aktualizacji lub tworzeniu niepowtarzalnego stanu.

Znaczenie ma również zakres obowiązywania blokady. Powiązanie z transakcją powoduje, że blokada może zostać zwolniona przy zatwierdzeniu lub wycofaniu transakcji. Powiązanie z sesją utrzymuje ją dłużej, dlatego wymaga szczególnej ostrożności. Zakres sesyjny może być przydatny, gdy kilka instrukcji wykonywanych w różnych etapach powinno korzystać z tego samego zabezpieczenia, ale zwiększa ryzyko pozostawienia blokady po błędzie aplikacji.

W porównaniu ze zwykłą blokadą rekordu rozwiązanie aplikacyjne pozwala chronić znaczenie biznesowe, a nie tylko fizyczne dane. W porównaniu z kolejką zadań może być prostsze do wdrożenia, ale nie zapewnia automatycznie pełnego mechanizmu ponowień, priorytetów i trwałego śledzenia pracy. W porównaniu z kontrolą opartą wyłącznie na sprawdzeniu wartości przed zapisem lepiej zabezpiecza krytyczny fragment, ponieważ samo sprawdzenie bez blokady może zostać wykonane równocześnie przez kilka procesów.

Procedura z blokadą a typowe problemy implementacyjne

Najczęstszym problemem jest niespójne nazewnictwo zasobów. Jeżeli jedna część aplikacji blokuje zasób o nazwie Rezerwacja:123, a druga używa zapisu rezerwacja-123, system potraktuje te wartości jako dwa różne zasoby. Ochrona przestaje wtedy działać, mimo że w kodzie występują wywołania blokady. Nazwa powinna być tworzona według jednej, udokumentowanej reguły, z uwzględnieniem identyfikatora obiektu i operacji.

Drugie ryzyko wynika z braku sprawdzania wartości zwracanej przez polecenie. Uzyskanie blokady, przekroczenie czasu oczekiwania, anulowanie próby oraz błąd wykonania nie powinny być traktowane identycznie. Kod powinien rozróżniać te przypadki i odpowiednio zakończyć procedurę. Pominięcie wyniku może doprowadzić do wykonania chronionej operacji bez faktycznie uzyskanego prawa dostępu.

Problematyczne bywa także utrzymywanie blokady przez zbyt długi fragment kodu. Długie zapytania, operacje sieciowe, oczekiwanie na odpowiedź użytkownika lub wywołania zewnętrznych usług wewnątrz transakcji zwiększają czas oczekiwania innych procesów. Blokada powinna obejmować tylko konieczny odcinek pracy, a dane potrzebne do dalszej obsługi powinny być przygotowane wcześniej, jeżeli nie narusza to spójności.

Należy brać pod uwagę zakleszczenia. Mogą powstać wtedy, gdy pierwszy proces posiada blokadę A i oczekuje na B, a drugi posiada B i oczekuje na A. Ograniczenie tego ryzyka wymaga stałej kolejności pozyskiwania zasobów, krótkich transakcji, limitu oczekiwania oraz kontrolowanego mechanizmu ponowienia. Nie powinno się zakładać, że każde ponowienie jest bezpieczne. Jeżeli operacja częściowo zmieniła dane, kolejne wykonanie może powielić skutek.

Przydatne jest rejestrowanie nazwy zasobu, czasu rozpoczęcia oczekiwania, wyniku próby oraz identyfikatora operacji. Taki ślad ułatwia odróżnienie rzeczywistego konfliktu od problemu z połączeniem, błędnego zakresu transakcji albo opóźnienia spowodowanego niewłaściwym zapytaniem.

Procedura z blokadą — praktyczne wskazówki projektowe

Przed wdrożeniem warto opisać chronioną regułę prostym zdaniem: „w danym momencie tylko jeden proces może wykonać określone działanie dla konkretnego zasobu”. Następnie należy ustalić, co jest zasobem, kiedy blokada jest pobierana, kiedy zostaje zwolniona i co ma się wydarzyć przy braku dostępu. Taka definicja ogranicza ryzyko blokowania zbyt szerokiego obszaru.

Warto stosować krótkie i jednoznaczne nazwy, na przykład połączenie typu operacji, identyfikatora obiektu i wariantu działania. Nie powinno się używać wartości zależnych od przypadkowego formatu tekstu. Jeżeli nazwa jest tworzona dynamicznie, powinno się sprawdzić długość, znaki specjalne i możliwość kolizji dwóch różnych obiektów.

Parametr oczekiwania należy dobrać do charakteru operacji. Dla czynności interakcyjnych długie oczekiwanie zwykle pogarsza odbiór aplikacji. Dla pracy automatycznej możliwa jest próba ponowienia, ale powinna mieć limit, odstęp i warunek zakończenia. W komunikacie dla użytkownika warto wskazać, że zasób jest chwilowo zajęty, zamiast pozostawiać nieokreślony ekran oczekiwania.

Testy powinny obejmować co najmniej dwa równoległe żądania, przerwanie po uzyskaniu blokady, błąd w połowie transakcji, przekroczenie czasu oczekiwania, ponowienie po zakleszczeniu oraz utratę połączenia. Należy obserwować nie tylko poprawność wyniku, lecz także długość oczekiwania i możliwość odzyskania pracy po awarii. Pomocne są dzienniki zdarzeń, informacje o aktywnych sesjach oraz analiza planów zapytań, jeżeli blokada współwystępuje z wolnym odczytem lub modyfikacją.

Kiedy procedura z blokadą wymaga konsultacji serwisowej

Do konsultacji warto zgłosić się wtedy, gdy aplikacja okresowo przestaje odpowiadać, operacje wykonują się tylko pojedynczo mimo pozornej równoległości, użytkownicy otrzymują niejasne błędy albo po przerwaniu procesu zasób pozostaje niedostępny. Pomocne będzie przygotowanie opisu kolejności zdarzeń, przykładowej nazwy zasobu, czasu wystąpienia oraz informacji, czy problem dotyczy jednego rodzaju operacji, czy całej aplikacji.

W Warszawskim Pogotowiu Komputerowym 24/7 można omówić diagnostykę problemu z blokowaniem, analizę zachowania aplikacji oraz uporządkowanie sposobu obsługi błędów. Przed rozpoczęciem zmian powinno się zabezpieczyć kopię konfiguracji i ustalić, które działania są obserwacyjne, a które modyfikują środowisko. Pozwala to rozdzielić diagnozę od wdrożenia i zachować możliwość porównania stanu przed zmianą oraz po niej.

Procedura z blokadą jest użyteczna, gdy chroniona jest konkretna reguła współbieżności, lecz nie zastępuje całościowego projektu transakcji, kontroli uprawnień ani monitorowania. Najlepszy efekt uzyskuje się wtedy, gdy blokada ma jasno określony zakres, krótki czas życia, sprawdzany wynik oraz przewidywalną reakcję na konflikt. Dzięki temu mechanizm pozostaje narzędziem kontroli dostępu do zasobu, a nie przypadkowym źródłem opóźnień.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę