Microsoft SQL Server
Poziomy izolacji i blokowanie
Szukaj…
Uwagi
Znalazłem ten link - jest przydatny jako odniesienie: „Poziomy izolacji”
Przykłady ustawienia poziomu izolacji
Przykład ustawienia poziomu izolacji:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM Products WHERE ProductId=1;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; --return to the default one
READ UNCOMMITTED
- oznacza, że zapytanie w bieżącej transakcji nie może uzyskać dostępu do zmodyfikowanych danych z innej transakcji, która nie została jeszcze zatwierdzona - żadnych nieczytelnych odczytów! ALE możliwe są niepowtarzalne odczyty i odczyty fantomowe, ponieważ dane mogą być nadal modyfikowane przez inne transakcje.REPEATABLE READ
- oznacza, że zapytanie w bieżącej transakcji nie może uzyskać dostępu do zmodyfikowanych danych z innej transakcji, która nie została jeszcze zatwierdzona - żadnych nieczytelnych odczytów! Żadne inne transakcje nie mogą modyfikować danych odczytywanych przez bieżącą transakcję, dopóki nie zostanie ona zakończona, co eliminuje odczyty NIEPOPRAWNE. ALE, jeśli inna transakcja wstawi NOWE RZĘDY, a zapytanie zostanie wykonane więcej niż jeden raz, wiersze fantomowe mogą pojawić się rozpoczynając drugi odczyt (jeśli pasuje do instrukcji where zapytania).SNAPSHOT
- może zwracać tylko dane, które istnieją na początku zapytania. Zapewnia spójność danych. Zapobiega brudnym odczytom, odczytom niepowtarzalnym i odczytom fantomowym. Aby tego użyć - wymagana jest konfiguracja DB:
ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;GO;
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
-
READ COMMITTED
- domyślna izolacja serwera SQL. Zapobiega odczytaniu danych, które zostały zmienione przez inną transakcję do momentu zatwierdzenia. Używa współdzielonego blokowania i wersjonowania wierszy w tabelach, co zapobiega nieczytelnym odczytom. Zależy to od konfiguracji DB READ_COMMITTED_SNAPSHOT - jeśli jest włączony - używana jest wersja wiersza. aby włączyć - użyj tego:
ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;GO;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; --return to the default one
-
SERIALIZABLE
- używa fizycznych blokad, które są nabywane i utrzymywane do końca transakcji, co zapobiega brudnym odczytom, odczytom fantomowym, odczytom niepowtarzalnym. ALE ma to wpływ na wydajność DataBase, ponieważ współbieżne transakcje są serializowane i wykonywane jeden po drugim.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ;