See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 44050|Vastuse: 3

[Allikas] Entity Framework päringute optimeerimine WITH(NOLOCK)

[Kopeeri link]
Postitatud 2021-1-6 14:52:16 | | | |
Esiteks, see artikkel jaMitte WITH(NOLOCK) lisamisega, et parandada päringute jõudlustSelle asemel loetakse andmeid läbi tehingu isoleerimismehhanismi.

SQL Serveri andmebaasides, kui sama andmebaasitabelit loetakse ja kirjutatakse sageli samaaegselt, tekib lukustusprobleem, st sa ei saa lugeda enne, kui eelmine sisestamise, uuendamise ja kustutamise tehing on lõpetatud, ning pead ootama, kuni operatsioon on lõpetatud, enne kui saad valiku operatsiooni sooritada, et vältida samaaegseid operatsioone ja lugeda musta andmet.

SELECT lause koos WITH (NOLOCK) blokeerimise ummikseisu lahendamiseks.

Märkus:WITH(NOLOCK) kasutamine põhjustab musta andmelugemise

ef kuvab genereeritud SQL-laused
https://www.itsvse.com/thread-3813-1-1.html
Testkood on järgmine:

Kasuta Func delegate'i, et pakendada kood järgmiselt:

Tulemuseks olev SQL-lause on järgmine:

2021-01-06 14:32:09.9505 [ teema] DEBUG DEBUG LogCenter - sql lause: SELECT TOP (1)
    [Ulatus1]. [ID] KUI [ID],
    [Ulatus1]. [Nimi] AS [Nimi]
    FROM [dbo]. [Itsvse] AS [Ulatus1]
    KUS ([Extent1].[ Nimi] = @p__linq__0) VÕI (([Extent1].[ Nimi] ON NULL) JA (@p__linq__0 ON NULL))
2021-01-06 14:32:09.9515 [ teema] DEBUG DEBUG LogCenter - sql avaldus:

2021-01-06 14:32:09.9525 [ teema] DEBUG DEBUG LogCenter - sql lause: -- p__linq__0: 'itsvse.com' (tüüp = string, suurus = 4000)

2021-01-06 14:32:09.9525 [ teema] DEBUG DEBUG LogCenter - sql lause: -- Täitmine 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ teema] DEBUG DEBUG LogCenter - sql lause: -- Lõpetatud 1 ms jooksul, tulemus: SqlDataReader

2021-01-06 14:32:09.9555 [ teema] DEBUG DEBUG LogCenter - sql avaldus:

2021-01-06 14:32:09.9555 [ teema] DEBUG DEBUG LogCenter - sql avaldus: Suletud ühendus 2021-01-06 14:32:09 +08:00
Select Query ei sisalda NoLocki märksõna.

(Lõpp)





Eelmine:.NET/C# rakendab lihtsat logimist, mis põhineb BlockingCollectionil
Järgmine:.NET (CLS) avaliku keele spetsifikatsioon
 Üürileandja| Postitatud 2021-1-6 14:53:17 |
Kasuta: Lisa järgmine lause Global.cs Application_Start() ja genereeritud SQL lisab automaatselt (nolock)
//ef命令拦截器
DbInterception.Add(uus WithNoLockInterceptor());
Kui SQL-lause tuleb lukustada, lisa järgmine laiendus


1. Parandatud regulaaravaldiste veaprobleem, mis on internetis eritingimustel kättesaadavad

 Üürileandja| Postitatud 2021-1-10 10:27:32 |
SQL-skriptide testimiseks:

Testitulemused:

Vaikimisi ei lisata tehingut ja vaikimisi isolatsioonitase on õige:



Kestus: 17561 millisekundit

IsolationLevel.ReadUncommitted isolation level, nagu näidatud järgmisel pildil:



Aeg: 519 ms

Allikas:



 Üürileandja| Postitatud 2023-5-2 11:45:35 |
ADO.NET seaded lubavad musta lugemistReadUncommitted, kood on järgmine:


On ka teine viis seda kirjutada, dapper kood on järgmine:

Mõlema kirjutamistestiga pole probleeme,Soovitatav on kasutada esimest otse!!!


Teised kirjutamisviisid:



Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com