Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 19946|Svar: 3

[Kilde] Database-låse NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Kopier link]
Opslået på 14/01/2021 15.23.14 | | | |
NOLOCK
Når denne mulighed vælges, læser eller ændrer SQL Server data uden nogen låse. I dette tilfælde kan brugeren læse data fra en Uncommitted Transaction eller Roll Back, kendt som "dirty data".

HOLDLOCK
Når denne mulighed vælges, opretholder SQL Server denne delte lås indtil slutningen af hele transaktionen uden at frigive den undervejs.

UPDLOCK
Når denne mulighed vælges, bruger SQL Server en modificeringslås i stedet for en delt lås, når den læser data, og opretholder denne lås indtil slutningen af hele transaktionen eller kommandoen. Denne mulighed sikrer, at flere processer kan læse data samtidig, men kun den proces kan ændre dataene.

TABLOCK
Når denne mulighed vælges, vil SQL Server placere en delt lås på hele tabellen, indtil kommandoen slutter. Denne mulighed sikrer, at andre processer kun kan læse og ikke ændre dataene.

PAGLOCK
Denne mulighed er standardindstillingen, og når den vælges, bruger SQL Server en delt sidelås.

TABLOCKX (Eksklusiv Bordlås)
Når denne mulighed vælges, vil SQL Server låse hele tabellen, indtil kommandoen eller transaktionen slutter. Dette forhindrer andre processer i at læse eller ændre dataene i tabellen.

HOLDLOCK holder den delte lås, indtil hele transaktionen er fuldført, og bør frigives, så snart det låste objekt ikke længere er nødvendigt, svarende til SERIALIZABLE-transaktionsisolationsniveauet

NOLOCK-udsagnet udføres uden at udstede en delt lås, hvilket tillader beskidte læsninger, hvilket svarer til READ UNCOMMITTED transaktionsisolationsniveauet

PAGLOCK bruger flere sidelåse, hvor én tabellås bruges

READPAST lader SQL-serveren springe alle låste linjer over og udføre transaktioner, og for READ UNCOMMITTED transaktionsisolationsniveauer kun springe RID-låse over, ikke side-, zone- og tabellåse

ROWLOCK håndhæver brugen af rowlocks

TABLOCKX håndhæver brugen af en eksklusiv tabel-niveau lås, som forhindrer andre transaktioner i at bruge tabellen under transaktionen

UPLOCK tvinger brugen af opdateringer, når man læser en tabel uden en delt lås

Bemærk: Forskellen på at låse en tabel i en database
VÆLG * FRA tabellen MED (HOLDLOCK) Andre transaktioner kan læse tabellen, men kan ikke opdatere eller slette
VÆLG * FRA tabel MED (TABLOCKX) Andre transaktioner kan ikke læse, opdatere og slette tabeller




Tidligere:Win10 fjernskrivebord dual-screen display
Næste:.NET/C# Opret ETH wallet-konto og verifikationsadgangskode baseret på Nethereum [med kildekode]
 Udlejer| Opslået på 14/01/2021 16.53.24 |
Test TABLOCKX-låsen

Test-SQL'en er som følger:


Test af C#-koden:


Opdagelse,Hele tabellen er låst, og dataene kan kun forespørges, når transaktionen udføres, som vist i figuren nedenfor:



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



Da Opgave 2 og Opgave 4 ikke involverer data med id 1, er forespørgslen meget hurtig, og 3 og 4 skal vente på, at transaktionen er fuldført, før de forespørgsler.

Adfærd ved ændring af data

I en forpligtet læsetransaktion, der bruger rækkeversionering, vælges de rækker, der skal opdateres, ved hjælp af en blokeringsscanning, hvor en opdateringslås (U-lås) anvendes på datarækken, når dataværdien læses. Dette er det samme som en forpligtet læsetransaktion, der ikke bruger linjeversionering. Hvis en række data ikke opfylder opdateringskriterierne, frigives en opdateringslås på den række, og den næste række låses og scannes.

Update Lock (U): En låsetilstand, der forhindrer deadlocks, hvor to transaktioner først læser en dataressource. I tilfælde af modifikation forårsager brugen af delte låse og eksklusive låse nogle gange deadlocks, mens brugen af opdateringslåse kan undgå deadlocks. Ressourcens opdateringslås kan kun tildeles én transaktion ad gangen, og hvis ressourcen skal ændres, bliver opdateringslåsen en eksklusiv lås, ellers bliver den en delt lås.

Hyperlink-login er synlig.

 Udlejer| Opslået på 28/01/2021 17.30.51 |
Spørgsmål:

udpate a
sæt kolonne1 = 1
hvor idx = 1
Når sqlserver udfører update-sætningen, låser den hele tabellen

Analyse:

Urstruktur,Uden en primærnøgle kan du ikke kun låse rækkerne
 Udlejer| Opslået på 02/05/2023 11.47.24 |
Entity Framework forespørgselsoptimering WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com