| Termin | Definicja |
|---|---|
| Minimalizacja blokad | Minimalizacja blokad to projektowanie transakcji tak, by były krótkie i obejmowały możliwie wąski zakres danych. Na czym polega minimalizacja blokadMinimalizacja blokad to sposób projektowania operacji na danych, w którym transakcja wykonuje tylko niezbędne czynności, obejmuje możliwie mały zakres rekordów i kończy się bez zbędnej zwłoki. Blokada jest mechanizmem kontroli współbieżności: przez określony czas ogranicza innym transakcjom możliwość modyfikowania albo odczytywania danych objętych daną regułą. Dzięki temu kilka operacji wykonywanych równocześnie nie nadpisuje sobie wyników i nie odczytuje danych w stanie pośrednim. Sama obecność blokad nie oznacza błędu. Problem pojawia się wtedy, gdy blokada utrzymuje się długo, obejmuje zbyt wiele wierszy albo powoduje oczekiwanie wielu innych operacji. Skutkiem może być spadek wydajności, opóźnione zapisy, przekroczenie limitu czasu żądania lub zakleszczenie. Minimalizacja blokad nie polega więc na całkowitym usunięciu mechanizmu ochronnego, lecz na ograniczeniu czasu, zakresu i liczby konfliktów między równoległymi transakcjami. Krótka transakcja i wąski zakres danychPodstawową praktyką jest rozpoczęcie transakcji możliwie blisko operacji zapisu oraz jej zatwierdzenie zaraz po zakończeniu wymaganych zmian. Do czasu trwania transakcji nie powinny należeć czynności niezwiązane bezpośrednio z bazą danych, takie jak oczekiwanie na odpowiedź użytkownika, pobieranie pliku, komunikacja z zewnętrznym serwisem czy rozbudowane przeliczanie wykonywane w aplikacji. Jeżeli takie zadanie znajduje się wewnątrz transakcji, blokady mogą pozostać aktywne mimo braku rzeczywistej pracy na danych. Zakres blokady ogranicza się także przez precyzyjne warunki wyszukiwania. Aktualizacja pojedynczego rekordu powinna korzystać z jednoznacznego identyfikatora, na przykład klucza głównego, zamiast z nieprecyzyjnego warunku obejmującego dużą część tabeli. Znaczenie ma również indeks odpowiadający warunkowi wyszukiwania. Bez odpowiedniego dostępu do danych silnik może sprawdzać wiele wierszy, a w zależności od użytego mechanizmu kontroli współbieżności zwiększyć zakres blokad lub wydłużyć czas ich utrzymywania. Indeks nie zastępuje poprawnego projektu transakcji, ale może skrócić wyszukiwanie i zmniejszyć liczbę potencjalnych konfliktów. Ważna jest kolejność modyfikowania zasobów. Jeżeli różne części programu zmieniają te same tabele lub rekordy w odmiennym porządku, rośnie ryzyko zakleszczenia. Ustalenie jednej kolejności, na przykład najpierw rekord nadrzędny, a następnie powiązany rekord szczegółowy, ułatwia przewidywanie konfliktów. Przy niepowodzeniu transakcję należy wycofać, a aplikacja powinna poprawnie obsłużyć błąd zamiast pozostawiać niejasny stan operacji. Izolacja, odczyty i konflikty współbieżnościNa liczbę i rodzaj blokad wpływa poziom izolacji transakcji. Poziom ten określa, jakie zmiany wykonane przez inne transakcje mogą być widoczne podczas odczytu. Silniejsza izolacja daje większe gwarancje spójności, ale może zwiększać liczbę oczekiwań, jeżeli mechanizm opiera się na blokadach. Słabsza izolacja może poprawić współbieżność, lecz dopuszcza określone zjawiska, takie jak odczyt danych niezatwierdzonych, powtórny odczyt dający inny wynik albo pojawienie się nowych wierszy spełniających warunek. Dobór izolacji powinien wynikać z wymagań konkretnej operacji. Odczyt służący wyłącznie do wyświetlenia informacji może mieć inne wymagania niż sprawdzenie stanu magazynowego przed zmniejszeniem liczby dostępnych sztuk. W drugim przypadku sam odczyt nie wystarcza: sprawdzenie wartości i jej zmiana muszą być logicznie powiązane, aby dwie równoległe operacje nie wykorzystały tego samego stanu początkowego. Skracanie transakcji nie może prowadzić do rozdzielenia czynności, które powinny być atomowe. Do analizy problemu potrzebne są dane o czasie rozpoczęcia i zakończenia transakcji, zapytaniach oczekujących oraz zasobach, o które konkurują poszczególne operacje. W praktyce sprawdza się plan wykonania zapytania, warunki filtrowania, używane indeksy oraz kolejność odczytów i zapisów. Należy odróżnić blokadę od zwykłego przeciążenia procesora, powolnego dysku albo opóźnienia sieciowego. Objaw „zapytanie długo czeka” nie wskazuje samodzielnie przyczyny; potrzebna jest korelacja czasu oczekiwania z aktywnymi transakcjami i operacjami wejścia-wyjścia. Jak rozpoznać skutki w aplikacji na komputerzeW programie używanym na laptopie lub komputerze PC skutki nadmiernych blokad mogą wyglądać jak zawieszanie zapisu, opóźnione odświeżanie listy, wielokrotne komunikaty o przekroczeniu czasu albo pozorny brak reakcji po kliknięciu przycisku. Taki objaw nie oznacza automatycznie uszkodzenia sprzętu. Jeżeli aplikacja korzysta z lokalnego pliku danych lub z usługi dostępnej w sieci, przyczyną może być zarówno konflikt transakcji, jak i uszkodzony nośnik, problem z systemem plików, niedostępna usługa albo błędna obsługa wyjątków. Diagnostyka powinna rozpocząć się od odtworzenia problemu i ustalenia, czy opóźnienie występuje przy konkretnej operacji, czy przy całym programie. Następnie można porównać zachowanie przy jednym użytkowniku i przy równoległych zapisach, sprawdzić dzienniki aplikacji oraz ustalić, czy transakcje są zatwierdzane i wycofywane w każdym scenariuszu. Pomocne jest także sprawdzenie, czy program nie wykonuje operacji na dużym zbiorze danych bez ograniczenia wyników, czy nie przetrzymuje otwartego połączenia podczas pracy niezwiązanej z bazą oraz czy po błędzie nie ponawia automatycznie tej samej operacji. W przypadku problemów z aplikacją warto oddzielić usterkę sprzętową od błędu konfiguracji, systemu lub przepływu danych. Wnioski dotyczące minimalizacji blokad powinny wynikać z obserwacji konkretnego programu, jego logów oraz sposobu zapisu danych, a nie wyłącznie z samego komunikatu o spowolnieniu. |