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

Widok: 11079|Odpowiedź: 1

[Źródło] MSSQL z (nolock) nieuporządkowanym odczytem

[Skopiuj link]
Opublikowano 3.04.2020 10:06:04 | | |
Wady:

1. Daje to brudne odczyty

2. Dotyczy tylko wybranych instrukcji zapytań

Zalety:

1. Niektóre pliki twierdzą, że wydajność zapytań SQL z WITH (NOLOCK) może być zwiększona o 33%.

2. Może być używany do wewnętrznych instrukcji łączenia

Brudny odczyt: Użytkownik dokonuje modyfikacji zasobu, a inny użytkownik przypadkowo odczytuje zmodyfikowany rekord, a następnie pierwszy użytkownik rezygnuje z modyfikacji, a dane wracają do poprzedniej modyfikacji – te dwa różne wyniki to nieuczciwe odczyty.

Szczegóły:

Aby poprawić wydajność zapytań SQL, ogólnie rzecz biorąc, pierwszym krokiem jest stworzenie indeksu. W rzeczywistości, oprócz ustalania indeksów, gdy umieszczamy polecenia SQL, dodanie sekcji WITH (NOLOCK) do składni może poprawić zjawisko LOCK-owania zbiorów danych w środowisku z dużą liczbą zapytań online, poprawiając tym samym wydajność zapytań.

Jednak warto zauważyć, że SQL SELECT z (NOLOCK) może powodować Dirty Read.

Na przykład:

Oprócz prostego SELECT możesz także użyć składni SELECT z JOIN. Ale DELETE, INSERT, UPDATE i inne polecenia wymagające transakcji nie są dobre...


Niektóre pliki twierdzą, że wydajność zapytań SQL można zwiększyć o 33% dzięki WITH (NOLOCK).
Dodanie WITH (NOLOCK) informuje SQL Server, że nasze polecenie SELECT nie musi uwzględniać stanu blokady transakcji w bieżącej tabeli, więc wydajność zostanie znacznie poprawiona, a zjawisko blokady systemu bazodanowego znacznie ograniczone (w tym martwe zablokowanie).

Warto zauważyć, że ponieważ WITH (NOLOCK) nie uwzględnia blokady transakcji w bieżącej tabeli, więc gdy dane są w wielu fazach (np. transakcje w wielu tabelach – >np. systemy wypłat), WITH (NOLOCK) ignoruje dane, które obecnie przetwarzają proces transakcji...

Mówiąc wprost, używając NoLock, pozwala on odczytać dane, które zostały zmodyfikowane, ale transakcja jeszcze nie została zakończona. Dlatego jeśli musisz wziąć pod uwagę integralność danych transakcyjnych w czasie rzeczywistym, powinieneś dokładnie przemyśleć użycie WITH (NOLOCK).

Jeśli nie musisz brać pod uwagę transakcji, WITH (NOLOCK) może być przydatnym odniesieniem.

Notatka 1: WITH ( < table_hint > )
Określa skanowanie tabeli, jeden lub więcej indeksów używanych przez optymalizator zapytań,
Albo przez optymalizator zapytań, aby wykorzystać tę tabelę danych i użyć trybu blokady dla tego zdania (lock).

Uwaga 2: WITH (NOLOCK) jest równoważne READ uncommitted





Poprzedni:Opóźnienie master-slave bazy danych prowadzi do niedokładnego rozwiązywania zapytań
Następny:Rozwiązano problem, że Fiddler nie mógł przeszukiwać lokalnego localhosta, 127.0.0.1 zapytań sieciowych 127.0.0.1
Opublikowano 2020-4-5 o 14:21:36 |
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