Poziom izolacji transakcji w SQL Server oraz ich związek z nieczystymi odczytami, niepowtarzalnymi, odczytami fantomowymi itd. (argumenty kodu i sekwencje czasowe)
Rozumiejąc te problemy, które mogą pojawić się w przypadku równoległego dostępu do bazy danych, możemy dalej rozumieć pojęcie poziomu izolacji bazy danych, mówiąc prosto: jak chcemy izolować transakcje równoległe i w jakim stopniu? Na przykład, jeśli nieczyste odczyty można tolerować lub nie chcesz, aby transakcje równoległe miały nieczytelne odczyty, można je ustawić na poziom izolacji, aby izolacja między transakcjami równoległymi była luźna lub silna.
Im wyższy poziom izolacji, tym mniejsze ryzyko odczytu brudnych lub niekompletnych danych, ale tym poważniejsze jest pogorszenie wydajności w systemach o wysokiej równobieżności. Im niższy poziom izolacji, tym większa poprawa wydajności w systemie współbieżnym, ale same dane mogą być niepełne.
W SQL Server 2012 możesz ustawić poziom izolacji transakcji (od niskiego do wysokiego) za pomocą następującej składni:
USTAW POZIOM IZOLACJI TRANSAKCJI { PRZECZYTAJ NIEZAANGAŻOWANY | PRZECZYTAJ ZOBOWIĄZANIE | POWTARZALNY ODCZYT | MIGAWKA | SERIALIZOWALNY } [ ; ] Najpierw stwórz nowy skrypt testowy, stwórz bazę danych i wstaw dane testowe, w następujący sposób:
Stwórz nowe okno A, otworzyć transakcję, wykonać operację aktualizacji i poczekać 10 sekund przed zatwierdzeniem, kod wygląda następująco:
Stwórz nowe okno B, ustaw transakcję na READ UNCOMMITTED (odczyt bez zobowiązań, najniższy poziom, łatwym problemem jest brudny odczyt, ponieważ może odczytać dane zmodyfikowane przez inne transakcje, ale nie zatwierdzone). Robi to samo, co ustawienie (NOLOCK) w tabeli obiektów instrukcji SELECT w transakcji. Zapytaj dane, kod wygląda następująco:
Stwórz nowe okno C, bezpośrednio zapytuje dane, w następujący sposób:
Z kolei,Wykonaj okna A, B i C i sprawdź, że podczas aktualizacji danych okno B może natychmiast zwrócić dane (Możliwe, że odczyt to nieuczciwe dane), C okno musi poczekać, aż okno A zakończy wykonaniezwróci dane, jak pokazano na poniższym rysunku:
(Okno B)
(Okno C)
(Koniec)
|