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

Bekijken: 12282|Antwoord: 0

[Bron] SQL Server stelt het niveau van transactieisolatie in

[Link kopiëren]
Geplaatst op 05-02-2021 11:53:34 | | | |
Entity Framework Query-optimalisatie WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

Databaselocks NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
Het niveau van isolatie van transacties in SQL Server en hun relatie tot dirty reads, niet-herhaalbare reads, phantom reads, enzovoort (codeargumenten en tijdreeksen)

Door deze problemen te begrijpen die kunnen ontstaan bij gelijktijdige toegang tot de database, kunnen we het concept van database-isolatieniveau blijven begrijpen, in gewone mensentaal: hoe wil je gelijktijdige transacties isoleren, en in welke mate? Als bijvoorbeeld dirty reads kunnen worden getolereerd, of als je niet wilt dat gelijktijdige transacties dirty reads hebben, dan kunnen deze worden ingesteld op isolatieniveau om de isolatie tussen gelijktijdige transacties los of ernstig te maken.

Hoe hoger het isolatieniveau, hoe kleiner de kans dat je vuile of onvolledige data leest, maar hoe ernstiger de prestatieverslechtering is in systemen met hoge gelijktijdigheid. Hoe lager het isolatieniveau, hoe groter de prestatieverbetering in het gelijktijdige systeem, maar de data zelf kan onvolledig zijn.

In SQL Server 2012 kun je het isolatieniveau van een transactie instellen (van laag naar hoog) met deze syntaxis:

STEL HET NIVEAU VAN TRANSACTIEISOLATIE IN
    { LEES ONVERBONDEN
    | LEES TOEGEWIJD
    | HERHAALBARE LEESSTOF
    | MOMENTOPNAME
    | SERIALISEERBAAR
    }
[ ; ]
Maak eerst een nieuw testscript aan, maak een database aan en voeg testgegevens in, als volgt:



Maak een nieuw venster A aan, open een transactie, voer de update-operatie uit en wacht 10 seconden voordat je committeert, de code is als volgt:

Maak een nieuw venster B aan, stel de transactie in READ UNCOMMITTED (niet-committed read, het laagste niveau, het makkelijke probleem is dirty reading, omdat het de data kan lezen die door andere transacties zijn gewijzigd maar niet committed.) Het doet hetzelfde als het instellen van (NOLOCK) op de SELECT-instructieobjecttabel in een transactie. Zoek de gegevens op, de code is als volgt:

Maak een nieuw venster C aan, direct de gegevens opvragen, als volgt:

Op zijn beurt,Voer vensters A, B en C uit en ontdek dat bij het updaten van data venster B onmiddellijk data kan teruggeven (Het is mogelijk dat de meting vuile data is), moet het C-venster wachten tot A-venster is uitgevoerdzal de gegevens teruggeven, zoals weergegeven in de onderstaande figuur:


(Raam B)


(Raam C)

(Einde)





Vorig:Redis-persistentieverschil tussen RDB en AOF
Volgend:MySQL exporteert de queryresultaten naar een bestand
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