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

Bekijken: 11079|Antwoord: 1

[Bron] MSSQL MET (NOLOCK) vuil lezen

[Link kopiëren]
Geplaatst op 3-4-2020 10:06:04 | | |
Nadelen:

1. Het zal ondeugende leesstof opleveren

2. Alleen van toepassing op selecte querystatements

Voordelen:

1. Sommige bestanden zeggen dat de efficiëntie van SQL-querys met WITH (NOLOCK) met 33% kan worden verhoogd.

2. Kan worden gebruikt voor inner join-statements

Dirty read: Een gebruiker doet een wijziging aan een bron, en een andere gebruiker leest toevallig het gewijzigde record, waarna de eerste gebruiker de wijziging opgeeft en de data terugkeert naar de vorige wijziging; deze twee verschillende resultaten zijn dirty reading.

Details:

Om de prestaties van SQL-querys te verbeteren, is het in het algemeen de eerste overweging om een index aan te maken. Sterker nog, naast het opzetten van indexen, kan het toevoegen van een sectie WITH (NOLOCK) aan de syntaxis bij het plaatsen van datasets die worden LOCKED in een omgeving met een groot aantal online queries verbeteren, waardoor de queryprestaties verbeteren.

Eén ding om op te merken is echter dat SQL SELECT met (NOLOCK) Dirty Read kan veroorzaken.

Bijvoorbeeld:

Naast eenvoudige SELECT kun je ook de SELECT-syntaxis gebruiken met JOIN. Maar DELETE, INSERT, UPDATE en andere commando's die transacties vereisen zijn niet goed...


Sommige bestanden zeggen dat de efficiëntie van SQL-querys met 33% kan worden verhoogd met WITH (NOLOCK).
Het toevoegen van WITH (NOLOCK) vertelt SQL Server dat ons SELECT-commando niet hoeft rekening te houden met de transaction lock-status van de huidige tabel, waardoor de prestaties aanzienlijk verbeteren en het lock-fenomeen van het databasesysteem aanzienlijk zal worden verminderd (inclusief deadlock).

Een ding om op te merken is dat omdat WITH (NOLOCK) geen rekening houdt met de transactievergrendeling van de huidige tabel, dus wanneer er data is die zich in meerdere fasen bevindt (bijvoorbeeld transacties over meerdere tabellen - >bijv. opnamesystemen), negeert WITH (NOLOCK) de data die het transactieproces momenteel verwerkt...

Om het maar bot te zeggen: bij het gebruik van NoLock kan men gegevens lezen die zijn aangepast maar de transactie nog niet is afgerond. Daarom moet je, als je rekening moet houden met de realtime integriteit van transactiegegevens, goed nadenken over het gebruik van WITH (NOLOCK).

Als je geen transacties hoeft te overwegen, kan WITH (NOLOCK) een nuttige referentie zijn.

Noot 1: MET ( < table_hint > )
Specificeert de tabelscan, een of meer indexen die door de query-optimizer worden gebruikt,
Of door de query-optimizer om deze datatabel te benutten en de lock mode voor deze instructie te gebruiken.

Noot 2: WITH (NOLOCK) is gelijkwaardig aan READ UNCOMMITTED





Vorig:Database master-slave latentie leidt tot onnauwkeurige queryresolutie
Volgend:Het probleem opgelost dat Fiddler geen lokale localhost, 127.0.0.1 netwerkverzoeken kon crawlen
Geplaatst op 2020-4-5 14:21:36 |
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