Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 19946|Antwoord: 3

[Bron] Databaselocks NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Link kopiëren]
Geplaatst op 14-01-2021 15:23:14 | | | |
NOLOCK
Wanneer deze optie is geselecteerd, leest of wijzigt SQL Server gegevens zonder enige locks. In dit geval kan de gebruiker gegevens lezen van een Uncommitted Transaction of Roll Back, bekend als "dirty data".

HOLDLOCK
Wanneer deze optie is geselecteerd, behoudt SQL Server deze gedeelde vergrendeling tot het einde van de hele transactie zonder deze onderweg vrij te geven.

UPDLOCK
Wanneer deze optie is geselecteerd, gebruikt SQL Server een modify lock in plaats van een shared lock bij het lezen van data en behoudt deze lock tot het einde van de hele transactie of het commando. Deze optie zorgt ervoor dat meerdere processen tegelijkertijd data kunnen lezen, maar alleen dat proces kan de data wijzigen.

TABLOCK
Wanneer deze optie is geselecteerd, plaatst SQL Server een gedeelde lock op de hele tabel totdat het commando eindigt. Deze optie zorgt ervoor dat andere processen alleen de data kunnen lezen en niet kunnen wijzigen.

PAGLOCK
Deze optie is de standaardoptie, en wanneer geselecteerd, gebruikt SQL Server een gedeelde paginavergrendeling.

TABLOCKX (Exclusief Tafelslot)
Wanneer deze optie wordt geselecteerd, plaatst SQL Server een lock op de hele tabel totdat het commando of de transactie is beëindigd. Dit voorkomt dat andere processen de gegevens in de tabel lezen of wijzigen.

HOLDLOCK houdt de gedeelde vergrendeling vast totdat de volledige transactie is voltooid en moet worden vrijgegeven zodra het vergrendelde object niet meer nodig is, gelijk aan het SERIALIZABLE transactie-isolatieniveau

De NOLOCK-instructie wordt uitgevoerd zonder een gedeelde vergrendeling uit te voeren, waardoor dirty reads mogelijk zijn, wat gelijk is aan het READ UNCOMMITTED transactieisolatieniveau

PAGLOCK gebruikt meerdere paginavergrendelingen waarbij één tabelslot wordt gebruikt

READPAST laat de SQL-server alle vergrendelde regels overslaan en transacties uitvoeren, en voor READ UNCOMMITTED transactieisolatieniveaus alleen RID-locks overslaan, niet pagina-, zone- en tabellocks

ROWLOCK handhaaft het gebruik van rowlocks

TABLOCKX handhaaft het gebruik van een exclusieve tabel-niveau lock, die voorkomt dat andere transacties de tabel tijdens de transactie gebruiken

UPLOCK dwingt het gebruik van updates af bij het lezen van een tabel zonder gedeelde vergrendeling

Opmerking: Het verschil tussen het vergrendelen van een tabel in een database
SELECTEER * UIT de tabel MET (HOLDLOCK) Andere transacties kunnen de tabel lezen, maar kunnen niet bijwerken of verwijderen
SELECTEER * UIT tabel MET (TABLOCKX) Andere transacties kunnen tabellen niet lezen, bijwerken en verwijderen




Vorig:Win10 Remote Desktop Dual-Screen Display Display
Volgend:.NET/C# Maak een ETH-walletaccount en verificatiewachtwoord aan op basis van Nethereum [met broncode]
 Huisbaas| Geplaatst op 14-01-2021 16:53:24 |
Test het TABLOCKX-slot

De test-SQL is als volgt:


De C#-code testen:


Ontdekking,De hele tabel is vergrendeld en de gegevens kunnen alleen worden opgevraagd wanneer de transactie wordt uitgevoerd, zoals getoond in de onderstaande figuur:



Verwijder WITH(TABLOCKX) en werk alleen de data bij met ID 1, de test is als volgt:



Omdat Taak 2 en Taak 4 geen data met id 1 betreffen, is de query erg snel en moeten 3 en 4 wachten tot de transactie is afgerond voordat ze een query indienen.

Gedrag bij het wijzigen van data

In een gecommitteerde leestransactie die gebruikmaakt van rijversiebeheer, selecteer je de rijen die bijgewerkt moeten worden met een blocking scan, waarbij een update-lock (U-lock) wordt toegepast op de data-rij wanneer de datawaarde wordt gelezen. Dit is hetzelfde als een gecommitteerde leestransactie die geen gebruikmaakt van lijnversiebeheersing. Als een rij data niet aan de updatecriteria voldoet, wordt er een update-lock op die rij losgemaakt en wordt de volgende rij vergrendeld en gescand.

Update Lock (U): Een lock-modus die deadlocks voorkomt, waarbij twee transacties eerst een databron lezen. In het geval van wijziging veroorzaakt het gebruik van gedeelde en exclusieve locks soms deadlocks, terwijl het gebruik van update-locks het optreden van deadlocks kan voorkomen. De update-lock van de resource kan slechts aan één transactie tegelijk worden toegewezen, en als de resource aangepast moet worden, wordt de update-lock een exclusieve lock, anders wordt het een gedeelde lock.

De hyperlink-login is zichtbaar.

 Huisbaas| Geplaatst op 28-01-2021 17:30:51 |
Uitgeven:

Udpate a
stel kolom1 = 1
waarbij idx = 1
Wanneer sqlserver de update-instructie uitvoert, vergrendelt het de hele tabel

Analyse:

horlogestructuur,Zonder primaire sleutel kun je alleen de rijen vergrendelen
 Huisbaas| Geplaatst op 02-05-2023 11:47:24 |
Entity Framework Query-optimalisatie WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com