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

Bekijken: 44050|Antwoord: 3

[Bron] Entity Framework Query-optimalisatie WITH(NOLOCK)

[Link kopiëren]
Geplaatst op 6-1-2021 14:52:16 | | | |
Allereerst dit artikel enNiet door WITH(NOLOCK) toe te voegen om de queryprestaties te verbeterenIn plaats daarvan worden de gegevens gelezen via het isolatiemechanisme van de transactie.

In SQL Server-databases, wanneer dezelfde databasetabel vaak tegelijk wordt gelezen en geschreven, ontstaat er een lockprobleem, dat wil zeggen, je kunt niet lezen totdat de vorige invoeg-, update- en verwijdertransactie is voltooid, en je moet wachten tot de bewerking is voltooid voordat je de select-operatie kunt uitvoeren, om gelijktijdige bewerkingen en het lezen van vuile data te voorkomen.

SELECT-instructie met WITH (NOLOCK) om de blokkerende deadlock op te lossen.

Notitie:Het gebruik van WITH(NOLOCK) resulteert in vervuilde datalezing

ef toont de gegenereerde SQL-instructies
https://www.itsvse.com/thread-3813-1-1.html
De testcode is als volgt:

Gebruik Func delegate om de code als volgt te verpakken:

De resulterende SQL-instructie is als volgt:

2021-01-06 14:32:09.9505 [ thread] DEBUG DEBUG LogCenter - sql-instructie: SELECT TOP (1)
    [Extent1]. [ID] ALS [ID],
    [Extent1]. [Naam] AS [Naam]
    VAN [dbo]. [Itsvse] AS [Extent1]
    WAAR ([Extent1].[ Naam] = @p__linq__0) OF (([Extent1].[ Naam] IS NULL) EN (@p__linq__0 IS NULL))
2021-01-06 14:32:09.9515 [ thread] DEBUG DEBUG LogCenter - sql-instructie:

2021-01-06 14:32:09.9525 [ thread] DEBUG DEBUG LogCenter - sql statement: -- p__linq__0: 'itsvse.com' (type = string, size = 4000)

2021-01-06 14:32:09.9525 [ thread] DEBUG DEBUG LogCenter - sql-instructie: -- Uitvoerend op 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ thread] DEBUG DEBUG LogCenter - sql statement: -- Voltooid in 1 ms met resultaat: SqlDataReader

2021-01-06 14:32:09.9555 [ thread] DEBUG DEBUG LogCenter - sql-instructie:

2021-01-06 14:32:09.9555 [ thread] DEBUG DEBUG LogCenter - sql-instructie: Gesloten verbinding op 2021-01-06 14:32:09 +08:00
selecteer query bevat het Nolock-sleutelwoord niet.

(Einde)





Vorig:.NET/C# implementeert eenvoudige logging gebaseerd op BlockingCollection
Volgend:.NET (CLS) specificatie in een openbare taal
 Huisbaas| Geplaatst op 6-1-2021 14:53:17 |
Gebruik: Voeg de volgende instructie toe aan de Application_Start() van de Global.cs, en de gegenereerde SQL zal automatisch toevoegen(nolock)
//ef命令拦截器
DbInterception.Add(nieuw WithNoLock Interceptor());
Als de SQL-instructie vergrendeld moet worden, voeg dan de volgende extensie toe


1. Het foutprobleem van reguliere expressies die op het internet worden aangeboden onder bijzondere omstandigheden opgelost

 Huisbaas| Geplaatst op 10-1-2021 10:27:32 |
SQL-scripts testen:

Testresultaten:

Er wordt standaard geen transactie toegevoegd, en het standaard isolatieniveau is correct:



Duur: 17.561 milliseconden

IsolationLevel.ReadUncommitted isolatieniveau, zoals weergegeven in de volgende afbeelding:



Tijd: 519 ms

Bron:



 Huisbaas| Geplaatst op 2 juli 2023 om 11:45 |
ADO.NET instellingen staan vuil lezen toeLeesOnverbonden, de code is als volgt:


Er is nog een andere manier om het te schrijven, de dapper-code is als volgt:

Er zijn geen problemen met beide toetsen schrijven,Het wordt aanbevolen om de eerste direct te gebruiken!!!


Andere manieren om te schrijven:



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