Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

Cześć wszystkim. Vladislav Rodin jest w kontakcie. Obecnie jestem kierownikiem kursu High Workload Architect w firmie OTUS, a także prowadzę kursy z zakresu architektury oprogramowania.

Oprócz nauczania, jak być może zauważyłeś, piszę autorskie materiały na blog OTUS na Habré i chcę, aby dzisiejszy artykuł zbiegł się z uruchomieniem kursu „PostgreSQL”do którego można już zapisywać się.

Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

Wprowadzenie

В ostatni raz rozmawialiśmy o tym, że transakcje w bazach danych służą rozwiązaniu dwóch problemów: zapewnieniu odporności na awarie oraz dostępowi do danych w konkurencyjnym środowisku. Aby w pełni wykonać te zadania, transakcja musi posiadać właściwości ACID. Dzisiaj porozmawiamy szczegółowo o liście ja (izolacja) w tym skrócie.

Izolacja

Izolacja rozwiązuje problem dostępu do danych w konkurencyjnym środowisku, zasadniczo zapewniając ochronę przed warunkami wyścigowymi. W idealnym przypadku izolacja oznacza serializację, która jest właściwością zapewniającą, że wynik równoległego wykonywania transakcji będzie taki sam, jak gdyby były wykonywane sekwencyjnie. Głównym problemem związanym z tą właściwością jest to, że jest ona bardzo trudna do zapewnienia pod względem technicznym i w rezultacie ma znaczący wpływ na wydajność systemu. Dlatego izolacja jest często osłabiana, akceptując ryzyko pewnych anomalii, które zostaną omówione poniżej. Możliwość wystąpienia określonych anomalii precyzyjnie charakteryzuje poziom izolacji transakcji.

Najbardziej znane anomalie to: brudny odczyt, niepowtarzalny odczyt, fantomowy odczyt, ale w rzeczywistości jest ich jeszcze 5: brudny zapis, utrata aktualizacji kursora, utracona aktualizacja, odczytanie przekrzywienia, przekrzywienie zapisu.

Brudny zapis

Istotą anomalii jest to, że transakcje mogą nadpisać niezatwierdzone dane.

Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

Ta anomalia jest niebezpieczna nie tylko dlatego, że dane mogą powodować konflikt po zatwierdzeniu obu transakcji (jak na obrazku), ale także dlatego, że naruszona jest atomowość: ponieważ pozwalamy na nadpisywanie niezatwierdzonych danych, nie jest jasne, jak wycofać jedną transakcję bez wpływu na inną .

Anomalię można potraktować w prosty sposób: przed rozpoczęciem rejestracji zakładamy blokadę rekordu, uniemożliwiając innym transakcjom zmianę rekordu do czasu zdjęcia blokady.

Brudna lektura

Brudny odczyt oznacza odczyt niezatwierdzonych danych.

Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

Problemy pojawiają się, gdy trzeba podjąć działania lub decyzje na podstawie próbki.

Aby skorygować anomalię, możesz dołączyć blokadę odczytu, ale będzie to miało duży wpływ na wydajność. Dużo prościej jest powiedzieć, że w przypadku transakcji typu rollback konieczne jest zapisanie w systemie stanu początkowego danych (przed rozpoczęciem rejestracji). Dlaczego nie przeczytać stamtąd? Jest na tyle niedrogi, że większość baz danych domyślnie usuwa brudny odczyt.

Utracona aktualizacja

Utracona aktualizacja oznacza utracone aktualizacje, a tłumaczenie dość trafnie oddaje istotę problemu:

Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

W rzeczywistości wynik transakcji T2 został odwrócony. Sytuację tę można skorygować poprzez jawne lub ukryte blokady zapisu. Oznacza to, że albo po prostu aktualizujemy rekord, a następnie następuje niejawna blokada, albo wykonujemy to wybierz aktualizację, powodując blokadę odczytu i zapisu. Należy pamiętać, że taka operacja jest dość niebezpieczna: naszym „niewinnym” czytaniem blokujemy inne odczyty. Niektóre bazy danych oferują większe bezpieczeństwo wybierz do udostępnienia, umożliwiając odczyt danych, ale bez modyfikowania.

Kursor utracił aktualizację

Aby zapewnić lepszą kontrolę, bazy mogą oferować inne narzędzia, takie jak kursor. Kursor to struktura zawierająca zestaw wierszy i umożliwiająca iterację po nich. zadeklaruj nazwę_kursora dla instrukcji wyboru. Zawartość kursora jest opisana poprzez wybór.

Dlaczego potrzebujesz kursora? Faktem jest, że niektóre bazy danych oferują blokadę wszystkich rekordów wybranych przez selekcję (stabilność odczytu) lub tylko rekordu, na którym aktualnie znajduje się kursor (stabilność kursora). Przy stabilności kursora zaimplementowano krótką blokadę, co pozwala nam zmniejszyć liczbę blokad w przypadku iteracji po dużej próbce danych. Dlatego anomalia utraconej aktualizacji jest izolowana oddzielnie dla kursora.

Niepowtarzalny odczyt

Odczyt niepowtarzalny polega na tym, że podczas realizacji naszej transakcji 2 kolejne odczyty tego samego rekordu doprowadzą do różnych wyników, ponieważ pomiędzy tymi dwoma odczytami wkroczyła inna transakcja, zmieniła nasze dane i została zatwierdzona.

Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

Dlaczego jest to w ogóle problem? Wyobraź sobie, że celem transakcji T2 na obrazku jest wybranie wszystkich towarów, których cena jest niższa niż 150 USD. Ktoś inny podniósł cenę do 200 dolarów. Dlatego zainstalowany filtr nie działał.

Anomalie te przestają występować po dodaniu blokad dwufazowych lub zastosowaniu mechanizmu MVCC, o czym chciałbym osobno porozmawiać.

Czytanie fantomowe

Phantom to odczyt danych, które zostały dodane przez inną transakcję.

Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

Jako przykład możemy zaobserwować nieprawidłowy wybór najtańszego produktu w przypadku wystąpienia tej anomalii.

Pozbycie się odczytów fantomowych jest już dość trudne. Regularne blokowanie nie wystarczy, ponieważ nie możemy zablokować czegoś, czego jeszcze nie ma. Systemy 2PL korzystają z blokowania predykcyjnego, podczas gdy systemy MVCC posiadają harmonogram transakcji, który wycofuje transakcje, które mogą zostać zakłócone przez wstawienie. Zarówno pierwszy, jak i drugi mechanizm są dość ciężkie.

Przeczytaj przekrzywienie

Skośność odczytu ma miejsce, gdy pracujemy z kilkoma tabelami, których zawartość musi się stale zmieniać.

Załóżmy, że mamy tabele reprezentujące posty i ich metainformacje:

Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

Jedna transakcja odczytuje z tabel, druga je modyfikuje:

Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

W wyniku transakcji T1 post ma tytuł = Good i update_by = T2, co jest pewnego rodzaju niespójnością.

W rzeczywistości jest to odczyt jednorazowy, ale jako część kilku tabel.

Aby temu zaradzić, T1 może zablokować wszystkie wiersze, które odczyta, co zapobiegnie zmianie informacji przez transakcję T2. W przypadku MVCC transakcja T2 zostanie anulowana. Ochrona przed tą anomalią może stać się istotna, jeśli będziemy używać kursorów.

Napisz przekrzywienie

Tę anomalię łatwiej też wytłumaczyć na przykładzie: załóżmy, że w naszym systemie co najmniej jeden lekarz powinien pełnić dyżur, ale obaj lekarze zdecydowali się odwołać dyżur:

Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

Anomalia oznaczała, że ​​żaden z lekarzy nie będzie na dyżurze. Dlaczego się to stało? Ponieważ transakcja sprawdzała warunek, który mogłaby naruszyć inna transakcja, a ze względu na izolację nie zaobserwowaliśmy tej zmiany.

To jest ten sam, niepowtarzalny odczyt. Alternatywnie wybrani mogą nakładać blokady na te rekordy.

Skos zapisu i odczytu są kombinacją poprzednich anomalii. Możesz rozważyć skośność zapisu, która jest zasadniczo odczytem fantomowym. Rozważmy tabelę zawierającą nazwiska pracowników, ich pensje i projekt, nad którym pracują:

Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

Co może wyniknąć z osłabienia poziomu izolacji transakcji w bazach danych?

W rezultacie otrzymujemy następujący obraz: każdy menedżer myślał, że jego zmiana nie doprowadzi do przekroczenia budżetu, więc dokonał zmian personalnych, które łącznie doprowadziły do ​​przekroczenia kosztów.

Przyczyna problemu jest dokładnie taka sama jak w przypadku odczytu fantomowego.

odkrycia

Złagodzenie poziomu izolacji transakcji w bazie danych jest kompromisem pomiędzy bezpieczeństwem a wydajnością; do wyboru tego poziomu należy podejść w oparciu o potencjalne ryzyko dla firmy w przypadku wystąpienia pewnych anomalii.

Dowiedz się więcej o kursie.

Źródło: www.habr.com

Dodaj komentarz