Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 19946|Svare: 3

[Kilde] Databaselåser NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Kopier lenke]
Publisert på 14.01.2021 15:23:14 | | | |
NOLOCK
Når dette alternativet er valgt, leser eller endrer SQL Server data uten noen låser. I dette tilfellet kan brukeren lese data fra en uforpliktet transaksjon eller Roll Back, kjent som «skitne data».

HOLDLOCK
Når dette alternativet er valgt, opprettholder SQL Server denne delte låsen til slutten av hele transaksjonen uten å slippe den underveis.

UPDLOCK
Når dette alternativet er valgt, bruker SQL Server en modificeringslås i stedet for en delt lås når den leser data, og opprettholder denne låsen til hele transaksjonen eller kommandoen er ferdig. Dette alternativet sikrer at flere prosesser kan lese data samtidig, men bare den prosessen kan endre dataene.

TABLOCK
Når dette alternativet er valgt, vil SQL Server plassere en delt lås på hele tabellen til kommandoen avsluttes. Dette alternativet sikrer at andre prosesser kun kan lese og ikke endre dataene.

PAGLOCK
Dette alternativet er standardvalget, og når det er valgt, bruker SQL Server en delt sidelås.

TABLOCKX (Eksklusiv bordlås)
Når dette alternativet er valgt, vil SQL Server låse hele tabellen til kommandoen eller transaksjonen avsluttes. Dette vil forhindre at andre prosesser leser eller endrer dataene i tabellen.

HOLDLOCK holder den delte låsen til hele transaksjonen er fullført, og bør frigjøres så snart det låste objektet ikke lenger trengs, tilsvarende nivået for transaksjonsisolasjon

NOLOCK-setningen utføres uten å utstede en delt lås, noe som tillater skitne lesinger, som tilsvarer nivået for READ UNCOMMITTED transaksjonsisolasjonsnivået

PAGLOCK bruker flere sidelåser hvor én tabelllås brukes

READPAST lar SQL-serveren hoppe over låste linjer og utføre transaksjoner, og for READ UNCOMMITTED transaksjonsisolasjonsnivåer, kun hoppe over RID-låser, ikke side-, sone- og tabelllåser

ROWLOCK håndhever bruken av rowlocks

TABLOCKX håndhever bruk av en eksklusiv tabellnivålås, som forhindrer at andre transaksjoner bruker tabellen under transaksjonen

UPLOCK tvinger bruk av oppdateringer når man leser en tabell uten delt lås

Merk: Forskjellen mellom å låse en tabell i en database
VELG * FRA tabell MED (HOLDLOCK) Andre transaksjoner kan lese tabellen, men kan ikke oppdatere eller slette
VELG * FRA tabell MED (TABLOCKX) Andre transaksjoner kan ikke lese, oppdatere og slette tabeller




Foregående:Win10 fjernskrivebord med to skjermer
Neste:.NET/C# Opprett ETH-lommebokkonto og verifiseringspassord basert på Nethereum [med kildekode]
 Vert| Publisert på 14.01.2021 16:53:24 |
Test TABLOCKX-låsen

Test-SQL-en er som følger:


Testing av C#-koden:


Oppdagelse,Hele tabellen er låst, og dataene kan kun forespørres når transaksjonen utføres, som vist i figuren nedenfor:



Slett WITH(TABLOCKX) og oppdater kun dataene med ID 1, testen er som følger:



Siden Oppgave 2 og Oppgave 4 ikke involverer data med id 1, går spørringen veldig raskt, og 3 og 4 må vente til transaksjonen er ferdig før de sender inn spørring.

Atferd ved endring av data

I en forpliktet lesetransaksjon som bruker radversjonering, velg radene som skal oppdateres ved hjelp av en blokkeringsskanning, hvor en oppdateringslås (U-lås) påføres dataraden når dataverdien leses. Dette er det samme som en forpliktet lesetransaksjon som ikke bruker linjeversjonering. Hvis en rad med data ikke oppfyller oppdateringskriteriene, frigjøres en oppdateringslås på den raden, og neste rad låses og skannes.

Oppdateringslås (U): En låsemodus som forhindrer deadlocks, der to transaksjoner leser en dataressurs først. Ved modifikasjon forårsaker bruk av delte låser og eksklusive låser noen ganger deadlocks, mens bruk av oppdateringslåser kan forhindre deadlocks. Ressursens oppdateringslås kan bare tildeles én transaksjon om gangen, og hvis ressursen må endres, blir oppdateringslåsen en eksklusiv lås, ellers blir den en delt lås.

Innloggingen med hyperkoblingen er synlig.

 Vert| Publisert på 28.01.2021 17:30:51 |
Utstede:

Udpate a
sett kolonne1 = 1
hvor idx = 1
Når sqlserver utfører update-setningen, låser hele tabellen

Analyse:

Klokkestruktur,Uten primærnøkkel kan du ikke bare låse radene
 Vert| Publisert på 02.05.2023 11:47:24 |
Entity Framework Spørringsoptimalisering WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com