2011-04-20 10 views
5

W jakich scenariuszach używamy SERIALIZABLE Isolation level? Widziałem kilka odpowiedzi na stronie internetowej, która mówi, że kiedy chcesz, aby transakcja była całkowicie odizolowana, zwykle robimy to.Praktyczne zastosowania poziomu izolacji Seralization?

Co chciałbym wiedzieć z własnego doświadczenia, to, że kiedy użyłeś tego w swoich projektach lub widziałeś to w innych projektach i jaki był specyficzny wymóg, który nie został spełniony przez inne poziomy izolacji?

Odpowiedz

6

SERIALIZABLE jest przydatna podczas tworzenia złożonych raportów, które wymagają kilku zapytań.

W READ COMMITTED lub REPEATABLE READ w zapytaniach można było zobaczyć zmiany wprowadzone między rozpoczęciem transakcji a momentem ich uruchomienia.

pg_dump, narzędzie PostgreSQL wysypisko, zaczyna mu pracę przy wydawaniu SET TRANSACTION ISOLATION LEVEL SERIALIZABLE, aby zagwarantować, że stan bazy dumpingu byłoby to, że od tej chwili narzędzie została uruchomiona, a kolejne zmiany w bazie danych nie mogą zakłócać działanie wysypisko.

2

Transakcje SERIALIZABLE są użyteczne, jeśli potrzebujesz prostego dowodu poprawności w równoczesnych obciążeniach. Ponieważ definicja poziomu izolacji transakcji szeregowalnych w standardzie SQL (od SQL-92) jest taka, że ​​zachowanie każdego równoległego zestawu możliwych do sfałszowania transakcji musi być spójne z pewną kolejnością wykonywania (jeden-na-czas), dowolny transakcja, która może być pokazana, aby robić właściwe rzeczy, gdy jest uruchamiana samodzielnie, zrobi to, co właściwe, jako część dowolnej kombinacji z serializowanych transakcji.

Koszt tej ochrony jest kosztowny - transakcje muszą być blokowane lub wycofywane, aby można je było ponowić w celu zapewnienia możliwej do sfałszowania transakcji, a informacje muszą być śledzone, aby określić, kiedy należy podjąć takie działania. W niektórych środowiskach programistycznych, z niewielką liczbą typów transakcji i niewielką liczbą programistów, często bardziej opłacalnym rozwiązaniem jest stosowanie mniej rygorystycznego poziomu izolacji i zarządzanie warunkami wyścigu bezpośrednio w kodzie aplikacji. Gdy masz już kilkudziesięciu programistów pracujących przeciwko schematowi z setkami tabel i dziesiątkami tysięcy typów transakcji, koszt określania warunków wyścigu może stać się przytłaczający przy mniej ścisłych poziomach izolacji i generalnie bardziej opłacalne będzie korzystanie z transakcji podlegających serializacji. .

Obecnie najczęściej stosowaną metodą dostarczania transakcji serializowalnych jest ścisłe blokowanie dwufazowe (S2PL), które polega na blokowaniu blokad utrzymywanych do końca każdej transakcji oraz wykrywaniu zakleszczenia z wycofywaniem w celu przerwania zakleszczeń. W przypadku obciążeń o niewielkiej ilości punktów spornych można zastosować optymalną kontrolę współbieżności (OCC). Śledzi "zestaw do odczytu" w trakcie transakcji i wycofuje się, jeśli jakakolwiek inna transakcja modyfikuje zestaw do odczytu. Niektóre produkty bazodanowe odnoszą się do izolacji snapshot jako serializowalne, chociaż w rzeczywistości nie zapewniają gwarancji wymaganych przez standard SQL. Nowa technika o nazwie Serializable Snapshot Isolation (SerializableSI lub SSI) została po raz pierwszy opisana w artykule akademickim prezentowanym w 2008 ACM SIGMOD i jest używana w PostgreSQL w wersji 9.1 i późniejszych. Korzysta z izolacji migawki oraz śledzenia zależności zależności odczytu i zapisu, aby określić, kiedy transakcja musi zostać anulowana. Istnieją inne techniki, które rzadziej występują w produkcji. Każdy z nich ma swój własny zestaw zalet i wad, zapewniając inny punkt progu rentowności dla takiego pytania.

Powiązane problemy