Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 12282|Svar: 0

[Källa] SQL Server sätter nivån för transaktionsisolering

[Kopiera länk]
Publicerad på 2021-02-05 11:53:34 | | | |
Entity Framework Frågeoptimering WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

Databaslås NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
Nivån av isolering av transaktioner i SQL Server och deras relation till smutsiga läsningar, icke-upprepningsbara läsningar, fantomläsningar osv. (kodargument och tidssekvenser)

Genom att förstå dessa problem som kan uppstå vid samtidiga åtkomst till databasen kan vi fortsätta att förstå begreppet databasisoleringsnivå, på lekmannaspråk: hur vill du isolera samtidiga transaktioner, och i vilken utsträckning? Till exempel, om smutsiga läsningar kan tolereras, eller om du inte vill att samtidiga transaktioner ska ha smutsiga läsningar, kan dessa ställas in på isoleringsnivå för att göra isoleringen mellan samtidiga transaktioner lös eller allvarlig.

Ju högre isoleringsnivå, desto mindre risk att läsa smutsiga eller ofullständiga data, men desto allvarligare är prestandaförsämringen i högsamtidighetssystem. Ju lägre isoleringsnivå, desto större prestandaförbättring i det samtidiga systemet, men själva datan kan vara ofullständig.

I SQL Server 2012 kan du ställa in isoleringsnivån för en transaktion (från låg till hög) med denna syntax:

SÄTT TRANSAKTIONSISOLERINGSNIVÅ
    { LÄS OENGAGERAT
    | LÄS ENGAGERAD
    | UPPREPBAR LÄSNING
    | ÖGONBLICKSBILD
    | SERIEFIENDÖS
    }
[ ; ]
Först skapar du ett nytt testskript, skapar en databas och infogar testdata, enligt följande:



Skapa ett nytt fönster A, öppna en transaktion, utföra uppdateringsoperationen och vänta 10 sekunder innan du committar, koden är följande:

Skapa ett nytt fönster B, sätt transaktionen READ UNCOMMITTED (ocommitted read, lägsta nivå, det enkla problemet är dirty reading, eftersom den kan läsa data som ändrats av andra transaktioner men inte committed.) Den gör samma sak som att sätta (NOLOCK) på SELECT-satsens objekttabell i en transaktion. Fråga datan, koden är följande:

Skapa ett nytt fönster C, direkt genom datan, enligt följande:

I sin tur,Kör fönster A, B och C och upptäck att när data uppdateras kan fönster B omedelbart returnera data (Det är möjligt att avläsningen är smutsig data), C-fönstret måste vänta på att A-fönstret ska bli klart med exekveringenkommer att returnera datan, som visas i figuren nedan:


(Fönster B)


(Fönster C)

(Slut)





Föregående:Redis-beständighetsskillnad mellan RDB och AOF
Nästa:MySQL exporterar frågeresultaten till en fil
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com