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
  1. 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.

  2. 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).

  3. 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;
  1. 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
  1. 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 ;


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow