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

Utsikt: 12282|Svare: 0

[Kilde] SQL Server setter transaksjonsisolasjonsnivået

[Kopier lenke]
Publisert på 05.02.2021 11:53:34 | | | |
Entity Framework Spørringsoptimalisering WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

Databaselåser NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
Nivået av isolasjon av transaksjoner i SQL Server og deres forhold til dirty reads, ikke-repeterbare reads, phantom reads osv. (kodeargumenter og tidssekvenser)

Ved å forstå disse problemene som kan oppstå ved samtidig tilgang til databasen, kan vi fortsette å forstå konseptet databaseisolasjonsnivå, på enkle språk: hvordan ønsker du å isolere samtidige transaksjoner, og i hvilken grad? For eksempel, hvis skitne lesninger kan tolereres, eller hvis du ikke vil at samtidige transaksjoner skal ha skitne lesninger, kan disse settes til isolasjonsnivå for å gjøre isolasjonen mellom samtidige transaksjoner løs eller alvorlig.

Jo høyere isolasjonsnivå, desto mindre sjanse for å lese skitne eller ufullstendige data, men desto mer alvorlig er ytelsesforringelsen i systemer med høy samtidighet. Jo lavere isolasjonsnivå, desto større ytelsesforbedring i det samtidige systemet, men dataene i seg selv kan være ufullstendige.

I SQL Server 2012 kan du sette isolasjonsnivået for en transaksjon (fra lavt til høyt) ved å bruke denne syntaksen:

SETT TRANSAKSJONSISOLASJONSNIVÅ
    { LES UFORPLIKTET
    | LES FORPLIKTET
    | REPETERBAR LESNING
    | ØYEBLIKKSBILDE
    | SERIALISERBAR
    }
[ ; ]
Først, lag et nytt testskript, lag en database, og sett inn testdata, som følger:



Opprett et nytt vindu A, åpne en transaksjon, utføre oppdateringsoperasjonen, og vent 10 sekunder før du forplikter deg, koden er som følger:

Opprett et nytt vindu B, sett transaksjonen READ UNCOMMITTED (Uncommitted read, laveste nivå, det enkle problemet er dirty reading, fordi den kan lese data som er modifisert av andre transaksjoner men ikke committed.) Den gjør det samme som å sette (NOLOCK) på SELECT-setningsobjekttabellen i en transaksjon. Spør i dataene, koden er som følger:

Opprett et nytt vindu C, spør dataene direkte, som følger:

På sin side,Kjør vinduer A, B og C, og finn at når du oppdaterer data, kan vindu B umiddelbart returnere data (Det er mulig at avlesningen er skitten data), C-vindu må vente til A-vindu er ferdig med å kjørevil returnere dataene, som vist i figuren nedenfor:


(Vindu B)


(Vindu C)

(Slutt)





Foregående:Redis-persistensforskjell mellom RDB og AOF
Neste:MySQL eksporterer spørringsresultatene til en fil
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