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

Widok: 19946|Odpowiedź: 3

[Źródło] Blokady bazy danych NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Skopiuj link]
Opublikowano 14.01.2021 15:23:14 | | | |
NOLOCK
Po wybraniu tej opcji SQL Server odczytuje lub modyfikuje dane bez żadnych blokad. W takim przypadku użytkownik może odczytać dane z Transakcji Niezobowiązanej lub Rollback, znanych jako "brudne dane".

HOLDLOCK
Gdy ta opcja zostanie wybrana, SQL Server utrzymuje tę wspólną blokadę aż do końca całej transakcji, nie zwalniając jej po drodze.

UPDLOCK
Po wybraniu tej opcji SQL Server używa blokady modyfikacji zamiast współdzielonej podczas odczytu danych i utrzymuje tę blokadę do końca całej transakcji lub polecenia. Ta opcja zapewnia, że wiele procesów może jednocześnie odczytywać dane, ale tylko ten proces może je modyfikować.

TABLOCK
Gdy ta opcja zostanie wybrana, SQL Server umieszcza wspólną blokadę na całej tabeli aż do zakończenia polecenia. Ta opcja zapewnia, że inne procesy mogą jedynie odczytywać i nie modyfikować danych.

PAGLOCK
Ta opcja jest domyślna, a po wybraniu SQL Server korzysta z blokady współdzielonej strony.

TABLOCKX (Ekskluzywny zamek stołowy)
Po wybraniu tej opcji SQL Server nałoży blokadę na całą tabelę do czasu zakończenia polecenia lub transakcji. To uniemożliwi innym procesom odczytywanie lub modyfikowanie danych w tabeli.

HOLDLOCK przechowuje współdzieloną blokadę do czasu zakończenia całej transakcji i powinien zostać zwolniony, gdy zablokowany obiekt nie jest potrzebny, równy poziomowi izolacji transakcji SERIALIZABLE

Instrukcja NOLOCK jest wykonywana bez wydawania współdzielonej blokady, co pozwala na brudne odczyty, co odpowiada poziomowi izolacji transakcji READ UNCOMMITTED

PAGLOCK używa wielu zamków stron, gdzie używa się jednej blokady stołowej

READPAST pozwala serwerowi sql pomijać zablokowane linie i wykonywać transakcje, a dla poziomów izolacji transakcji READ Noncommitted pomija tylko blokady RID, a nie blokady stron, stref i tabel

ROWLOCK wymusza stosowanie rowlocków

TABLOCKX wymusza stosowanie wyłącznej blokady na poziomie tabeli, która uniemożliwia innym transakcjom korzystanie z tabeli podczas transakcji

UPLOCK wymusza użycie aktualizacji podczas odczytu tabeli bez wspólnego zamknięcia

Uwaga: Różnica między blokowaniem tabeli w bazie danych
SELECT * FROM table WITH (HOLDLOCK) Inne transakcje mogą odczytywać tabelę, ale nie mogą ich aktualizować ani usuwać
WYBIERZ * Z TABELI Z (TABLOCKX) Inne transakcje nie mogą odczytywać, aktualizować i usuwać tabel




Poprzedni:Dwuekranowy wyświetlacz na pulpicie zdalnym Win10
Następny:.NET/C# Utwórz konto portfela ETH i hasło weryfikacyjne na podstawie Nethereum [z kodem źródłowym]
 Ziemianin| Opublikowano 14.01.2021 16:53:24 |
Przetestuj zamek TABLOCKX

Testowy SQL wygląda następująco:


Testowanie kodu C#:


Odkrycie,Cała tabela jest zablokowana, a dane można zapytać tylko po wykonaniu transakcji, jak pokazano na poniższym rysunku:



Usuń WITH(TABLOCKX) i aktualizuj dane tylko z ID 1, test wygląda następująco:



Ponieważ zadania 2 i 4 nie zawierają danych o id 1, zapytanie jest bardzo szybkie, a zadania 3 i 4 muszą poczekać na zakończenie transakcji przed zapytaniem.

Zachowanie podczas modyfikacji danych

W transakcji zadeklarowanego odczytu wykorzystującej wersjonowanie wiersza wybierz wiersze do aktualizacji za pomocą skanowania blokującego, gdzie do wiersza danych po odczytie wartości danych jest zastosowana blokada aktualizacji (U-lock). Jest to to samo co transakcja zadeklarowanego odczytu, która nie wykorzystuje wersjonowania linii. Jeśli wiersz danych nie spełnia kryteriów aktualizacji, blokada aktualizacji jest zwalniana na tym wierszu, a następny wiersz jest blokowany i skanowany.

Blokada aktualizacji (U): Tryb blokady zapobiegający martwym blokadom, gdzie dwie transakcje najpierw odczytują zasób danych. W przypadku modyfikacji stosowanie współdzielonych i wyłącznych blokad czasami powoduje zakleszczenia, podczas gdy stosowanie blokad aktualizacji pozwala uniknąć powstawania martwych blokad. Blokada aktualizacji zasobu może być przypisana tylko do jednej transakcji naraz, a jeśli zasób wymaga modyfikacji, blokada aktualizacji staje się zamkiem wyłącznym, w przeciwnym razie staje się zamkiem współdzielonym.

Logowanie do linku jest widoczne.

 Ziemianin| Opublikowano 28.01.2021 17:30:51 |
Problem:

udpate a
ustaw kolumnę 1 = 1
gdzie idx = 1
Gdy sqlserver wykonuje polecenie update, blokuje całą tabelę

Analiza:

Struktura zegarka,Bez klucza głównego nie można zamknąć tylko rzędów
 Ziemianin| Opublikowano 02.05.2023 11:47:24 |
Optymalizacja zapytań w ramach Entity Framework WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
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