Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 12282|Odpowiedź: 0

[Źródło] SQL Server ustala poziom izolacji transakcji

[Skopiuj link]
Opublikowano 05.02.2021 11:53:34 | | | |
Optymalizacja zapytań w ramach Entity Framework WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

Blokady bazy danych NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
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)





Poprzedni:Różnica w trwałości Redis między RDB a AOF
Następny:MySQL eksportuje wyniki zapytań do pliku
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com