| Termin | Definicja |
|---|---|
| Ustawienie poziomu izolacji | Ustawienie poziomu izolacji decyduje, jak bardzo równoległe transakcje mogą wpływać na siebie nawzajem. Co oznacza poziom izolacji transakcjiUstawienie poziomu izolacji określa, w jakim stopniu równoległe transakcje są od siebie oddzielone podczas odczytu i modyfikowania danych. Transakcja to logiczny zestaw operacji wykonywanych jako jedna całość, na przykład sprawdzenie stanu magazynowego i zmniejszenie liczby dostępnych sztuk po złożeniu zamówienia. Jeżeli w tym samym czasie działa wiele transakcji, silnik bazy danych musi ustalić, czy jedna z nich może odczytać zmiany wykonane przez inną, czy może odczytywać dane w trakcie ich modyfikacji oraz czy ponowny odczyt tego samego wiersza zwróci identyczny wynik. Im wyższa izolacja, tym mniej efektów ubocznych wynikających ze współbieżności, ale zwykle rośnie koszt blokowania, oczekiwania lub przechowywania wersji danych. Im niższa izolacja, tym większa przepustowość w sytuacjach, w których wiele operacji wykonuje się równolegle, lecz aplikacja musi zaakceptować mniej stabilny obraz danych. Poziom izolacji nie zastępuje kontroli uprawnień, kopii zapasowych ani mechanizmów zatwierdzania transakcji. Jest regułą określającą widoczność danych i sposób współdziałania transakcji. Anomalie odczytu przy pracy równoległejPrzy zbyt niskiej izolacji może wystąpić brudny odczyt, czyli odczytanie wartości zapisanej przez inną transakcję przed jej zatwierdzeniem. Jeżeli tamta transakcja później wykona wycofanie, pierwsza transakcja wykorzysta informację, która nigdy nie stała się trwałą częścią danych. Taki mechanizm może prowadzić do błędnych obliczeń, niezgodnych komunikatów w interfejsie albo decyzji opartych na stanie, który został anulowany. Innym problemem jest odczyt niepowtarzalny. W jego przypadku transakcja odczytuje wiersz, a następnie, przed kolejnym odczytem, inna transakcja zatwierdza zmianę tego samego wiersza. Dwa odczyty wykonane w ramach jednej operacji logicznej zwracają wtedy różne wartości. Możliwy jest także odczyt fantomowy: drugie wykonanie zapytania warunkowego zwraca dodatkowe wiersze albo nie zwraca już wcześniej znalezionych wierszy, ponieważ inna transakcja zatwierdziła wstawienie, usunięcie lub zmianę danych spełniających warunek. W praktyce należy odróżnić blokadę od samego poziomu izolacji. Blokada może uniemożliwić jednoczesną modyfikację tego samego zasobu, natomiast izolacja definiuje szersze zasady widoczności zmian. Silnik może używać blokad, wersjonowania wierszy albo obu mechanizmów. Dlatego sama nazwa poziomu izolacji nie przesądza jeszcze o czasie oczekiwania, liczbie konfliktów ani o tym, jak zachowa się konkretne zapytanie. Dobór ustawienia do operacji bazy danychPoziom izolacji powinien wynikać z wymaganej spójności, a nie z założenia, że zawsze należy wybrać ustawienie maksymalne. Operacja rozliczeniowa, która musi opierać obliczenia na stabilnym i zgodnym zestawie danych, wymaga ostrzejszych reguł niż ekran prezentujący orientacyjną listę rekordów. Dla odczytu informacyjnego dopuszczalny może być mniejszy stopień wzajemnego blokowania, natomiast przy aktualizacji salda, licznika lub stanu dostępności trzeba zapewnić, aby konkurencyjne transakcje nie nadpisały sobie wyników. Zmiana izolacji wpływa na zachowanie całego przepływu danych. Krótkie transakcje zwykle ograniczają czas zajmowania blokad, ale zbyt wczesne zatwierdzenie części operacji może pozostawić dane w stanie pośrednim z punktu widzenia kolejnych działań. Z kolei bardzo długa transakcja może blokować inne operacje albo utrzymywać wersje danych przez dłuższy czas. W aplikacji warto wyraźnie określić początek i koniec transakcji, obsłużyć wycofanie po błędzie oraz przewidzieć ponowienie operacji, gdy silnik zgłosi konflikt współbieżności. Podczas diagnostyki sprawdza się nie tylko deklarowane ustawienie, lecz także jego rzeczywiste zastosowanie. Istotne jest, czy parametr obowiązuje dla całej sesji, pojedynczego połączenia, konkretnej transakcji lub pojedynczego zapytania. Należy również ustalić, czy biblioteka dostępu do danych nie zmienia ustawienia automatycznie, czy połączenia są współdzielone przez pulę oraz czy aplikacja nie odczytuje danych poza zakresem transakcji. Bez tych informacji sama obserwacja wyniku zapytania może prowadzić do błędnej interpretacji. Objawy błędnej konfiguracji i sposób weryfikacjiNieprawidłowo dobrany poziom izolacji może objawiać się niespójnymi wynikami raportów, chwilowym wyświetlaniem nieaktualnych wartości, długim oczekiwaniem na zakończenie operacji albo błędami konfliktu przy zapisie. Warto odtworzyć problem na dwóch równoległych połączeniach i zapisać kolejność rozpoczęcia, odczytu, modyfikacji oraz zatwierdzenia transakcji. Taki test pozwala ustalić, czy problem wynika z brudnego odczytu, odczytu niepowtarzalnego, fantomów, nadpisania zmiany czy zwykłego opóźnienia komunikacji. Weryfikacja powinna obejmować logi aplikacji, czas trwania zapytań, liczbę ponowień oraz informacje o blokadach i wycofaniach, jeżeli silnik je udostępnia. Należy porównać ustawienie oczekiwane przez projekt z ustawieniem aktywnym w połączeniu, a następnie sprawdzić scenariusze zatwierdzenia i przerwania transakcji. Samo podniesienie izolacji bez pomiaru może ukryć objaw, lecz jednocześnie zwiększyć opóźnienia. Rzetelna naprawa polega na dopasowaniu granic transakcji, warunków aktualizacji i poziomu izolacji do konkretnej operacji oraz na sprawdzeniu zachowania pod obciążeniem. |