| Termin | Definicja |
|---|---|
| Wysoka konkurencyjność (concurrency) | Wysoka konkurencyjność wymaga starannego zarządzania blokadami, by transakcje nie blokowały się wzajemnie. Współbieżność wielu operacji w systemie komputerowymWysoka konkurencyjność, określana po angielsku jako concurrency, oznacza sytuację, w której wiele operacji korzysta z tych samych zasobów w tym samym czasie lub przeplata swoje wykonanie. W bazie danych mogą to być równoległe transakcje odczytujące i modyfikujące te same rekordy. Podobny problem występuje także poza bazami, na przykład wtedy, gdy kilka procesów zapisuje dane do jednego pliku, wiele wątków korzysta ze wspólnego obszaru pamięci albo kilka aplikacji próbuje użyć tego samego urządzenia wejścia-wyjścia. Sama współbieżność nie oznacza jeszcze prawdziwego wykonywania wszystkich zadań dokładnie w tej samej chwili. System operacyjny, procesor i silnik bazy danych mogą przełączać zadania między wątkami, wykonywać je na wielu rdzeniach lub łączyć oba mechanizmy. Korzyścią z wysokiej współbieżności jest możliwość obsługi większej liczby żądań bez zatrzymywania całej aplikacji na czas zakończenia pojedynczej operacji. Warunkiem jest jednak zachowanie spójności danych. Jeżeli jedna transakcja zmienia saldo, stan magazynowy albo status zlecenia, druga transakcja nie powinna otrzymać częściowo zapisanych informacji ani nadpisać wyniku pierwszej bez kontroli. Dlatego system musi określać, które operacje mogą działać równolegle, a które wymagają wzajemnego uporządkowania. W praktyce analizuje się nie tylko czas wykonania zapytań, lecz także czas oczekiwania na blokady, liczbę konfliktów, kolejki operacji oraz częstotliwość wycofywania transakcji. Blokady, zakres ich obowiązywania i konflikty transakcjiBlokada jest mechanizmem synchronizacji, który ogranicza dostęp do zasobu w czasie wykonywania operacji. W zależności od implementacji może dotyczyć pojedynczego rekordu, zestawu rekordów, strony danych, tabeli, pliku albo innego obiektu współdzielonego. Typowa blokada współdzielona pozwala wielu transakcjom jednocześnie odczytywać dane, ale uniemożliwia zmianę tych danych do czasu zwolnienia blokady. Blokada wyłączna jest używana przy modyfikacji i zwykle wyklucza zarówno inne modyfikacje, jak i operacje odczytu wymagające zgodności z aktualnym stanem. Dokładne zasady zależą od konkretnego silnika bazy danych i jego poziomu izolacji, dlatego nie należy zakładać, że identyczne zapytanie zachowa się tak samo w każdym produkcie. Problem pojawia się wtedy, gdy transakcja przetrzymuje blokadę dłużej, niż jest to konieczne. Przyczyną może być duża liczba przetwarzanych rekordów, brak odpowiedniego indeksu, oczekiwanie na urządzenie dyskowe, błąd aplikacji albo rozpoczęcie transakcji przed wykonaniem niezwiązanych z bazą czynności. Wysoka współbieżność zwiększa wtedy prawdopodobieństwo kolejek i wzajemnego oczekiwania. Szczególnie niebezpieczny jest zakleszczenie, czyli sytuacja, w której transakcja A czeka na zasób zablokowany przez transakcję B, a transakcja B czeka na zasób zablokowany przez A. Silnik musi wykryć taki cykl i przerwać co najmniej jedną transakcję, aby pozostałe mogły kontynuować pracę. Izolacja odczytów a poprawność przepływu danychPoziom izolacji określa, jakie zmiany wykonane przez inne transakcje mogą być widoczne podczas bieżącej transakcji. Zbyt słaba izolacja może dopuścić do odczytu danych, które nie zostały jeszcze zatwierdzone, albo do uzyskania różnych wyników dla tego samego zapytania w ramach jednej transakcji. Zbyt silna izolacja może natomiast powodować długie oczekiwanie na blokady i ograniczać przepustowość. W opisach systemów bazodanowych spotyka się między innymi problemy nazywane brudnym odczytem, niepowtarzalnym odczytem oraz odczytem fantomowym. Ich wystąpienie zależy od używanego silnika, konfiguracji i konkretnego sposobu wykonywania transakcji. Przepływ danych pozostaje logicznie poprawny tylko wtedy, gdy operacje tworzą spójny porządek. Przykładowo, przy rezerwacji jednego egzemplarza produktu aplikacja powinna atomowo sprawdzić dostępność i zmniejszyć licznik, zamiast wykonywać te czynności jako dwa niezależne kroki bez synchronizacji. W przeciwnym razie dwie równoległe transakcje mogą odczytać ten sam stan początkowy i obie uznać, że produkt jest dostępny. Oprócz blokad stosuje się również ograniczenia integralności, wersjonowanie rekordów, kontrolę numeru wersji oraz ponawianie transakcji po kontrolowanym błędzie współbieżności. Ponowienie powinno być ograniczone i bezpieczne, ponieważ automatyczne powtarzanie operacji nieidempotentnej może wykonać tę samą zmianę więcej niż raz. Objawy przeciążenia współbieżnością na laptopie i komputerze PCNa komputerze użytkownika skutki problemów ze współbieżnością mogą być widoczne jako pozornie losowe spowolnienia aplikacji, zawieszanie interfejsu, długie oczekiwanie na zapis pliku albo komunikaty o przekroczeniu limitu czasu. Nie każdy taki objaw oznacza jednak błąd blokad. Podobne zachowanie powodują przeciążenie procesora, brak pamięci RAM, intensywna praca dysku, uszkodzone nośniki, sterowniki oraz problemy z siecią. Diagnostyka powinna więc łączyć obserwację czasu odpowiedzi aplikacji z pomiarem użycia procesora, pamięci, dysku i połączenia sieciowego. Warto również ustalić, czy problem występuje przy jednym użytkowniku, czy dopiero wtedy, gdy wiele programów lub stanowisk wykonuje operacje równocześnie. Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC i ich podzespołów, dlatego podczas diagnozy objawów związanych z wysoką współbieżnością można oddzielić problem sprzętowy od problemu aplikacji lub bazy danych. Sprawdzenie stanu dysku, temperatur, pamięci operacyjnej, sterowników i stabilności systemu pomaga wykluczyć przyczyny lokalne. Jeżeli sprzęt działa prawidłowo, dalsza analiza powinna obejmować logi programu, czas trwania operacji, komunikaty o blokadach oraz sposób otwierania i zamykania transakcji. Taki podział jest istotny, ponieważ wymiana podzespołu nie usunie błędnej synchronizacji, a zmiana ustawień aplikacji nie naprawi niestabilnego dysku lub niewystarczającej pamięci. |