Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 44050|Odgovoriti: 3

[Vir] Optimizacija poizvedb v okviru entitete Z (NOLOCK)

[Kopiraj povezavo]
Objavljeno 6. 1. 2021 ob 14:52:16 | | | |
Najprej, ta članek inNe z dodajanjem WITH(NOLOCK) za izboljšanje zmogljivosti poizvedbNamesto tega se podatki preberejo skozi izolacijski mehanizem transakcije.

V bazah SQL Server, ko se ista tabela podatkov pogosto bere in piše hkrati, pride do težave z zaklepom, torej ne morete brati, dokler prejšnja transakcija vstavljanja, posodobitve in brisanja ni zaključena, in morate počakati, da je operacija zaključena, preden lahko izvedete izbirno operacijo, da preprečite sočasne operacije in branje umazanih podatkov.

Ukaz SELECT z WITH (NOLOCK) za rešitev blokade zastoja.

Opomba:Uporaba WITH(NOLOCK) bo povzročila umazano branje podatkov

ef prikazuje generirane SQL stavke
https://www.itsvse.com/thread-3813-1-1.html
Testna koda je naslednja:

Uporabite Func delegate za pakiranje kode na naslednji način:

Nastala SQL izjava je naslednja:

2021-01-06 14:32:09.9505 [ tema] DEBUG DEBUG LogCenter - sql izjava: SELECT TOP (1)
    [Extent1]. [ID] KOT [ID],
    [Extent1]. [Ime] AS [Ime]
    IZ [dbo]. [Itsvse] AS [Obseg1]
    KJER ([Extent1].[ Ime] = @p__linq__0) ALI (([Extent1].[ Ime] JE NULL) IN (@p__linq__0 JE NULL))
2021-01-06 14:32:09.9515 [ nit] DEBUG DEBUG LogCenter - sql izjava:

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

2021-01-06 14:32:09.9525 [ nit] DEBUG DEBUG LogCenter - sql izjava: -- Izvaja se 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ nit] DEBUG DEBUG LogCenter - sql stavek: -- Zaključeno v 1 ms z rezultatom: SqlDataReader

2021-01-06 14:32:09.9555 [ tema] DEBUG DEBUG LogCenter - sql izjava:

2021-01-06 14:32:09.9555 [ tema] DEBUG DEBUG LogCenter - sql izjava: Zaprta povezava na 2021-01-06 14:32:09 +08:00
Select poizvedba ne vključuje ključne besede nolock.

(Konec)





Prejšnji:.NET/C# izvaja preprosto beleženje na osnovi BlockingCollection
Naslednji:Specifikacija javnega jezika .NET (CLS)
 Najemodajalec| Objavljeno 6. 1. 2021 ob 14:53:17 |
Uporabite: Dodajte naslednjo izjavo v Application_Start() Global.cs in generirani SQL bo samodejno dodal with(nolock)
//ef命令拦截器
DbInterception.Add(new WithNoLockInterceptor());
Če je treba SQL ukaz zakleniti, dodajte naslednjo razširitev


1. Odpravil je problem napak regularnih izrazov, ki so bili na voljo na internetu v posebnih okoliščinah

 Najemodajalec| Objavljeno 10. 1. 2021 ob 10:27:32 |
Testiranje SQL skript:

Rezultati testov:

Privzeto ni dodana nobena transakcija, privzeta raven izolacije pa je pravilna:



Trajanje: 17561 milisekund

IsolationLevel.ReadNezavezana stopnja izolacije, kot je prikazano na naslednji sliki:



Čas: 519 ms

Izvir:



 Najemodajalec| Objavljeno 2023-5-2 ob 11:45:35 |
ADO.NET nastavitve dovoljujejo umazano branjeReadUncommitted, koda je naslednja:


Obstaja še en način pisanja, elegantna koda je naslednja:

Pri obeh pisnih testih ni težav,Priporočljivo je, da prvo uporabljate neposredno!!!


Drugi načini pisanja:



Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com