Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 44050|Odpoveď: 3

[Zdroj] Optimalizácia dotazov v rámci entít pomocou (NOLOCK)

[Kopírovať odkaz]
Zverejnené 6. júna 2021 o 14:52:16 | | | |
V prvom rade, tento článok aNie pridaním WITH(NOLOCK) na zlepšenie výkonu dotazovNamiesto toho sa dáta čítajú cez izolačný mechanizmus transakcie.

V databázach SQL Server, keď sa tá istá databázová tabuľka často číta a zapisuje súčasne, vzniká problém so zámkom, teda nemôžete čítať, kým nie je dokončená predchádzajúca transakcia vloženia, aktualizácie a vymazania, a musíte počkať, kým sa operácia dokončí, aby ste mohli vykonať operáciu select, aby ste zabránili súbežným operáciám a čítaniu špinavých dát.

Príkaz SELECT pomocou WITH (NOLOCK) na vyriešenie blokujúceho zablokovania.

Nota:Použitie WITH(NOLOCK) vedie k nekvalitnému čítaniu dát

ef zobrazuje generované SQL príkazy
https://www.itsvse.com/thread-3813-1-1.html
Testovací kód je nasledovný:

Použite Func delegate na zabalenie kódu nasledovne:

Výsledný SQL príkaz je nasledovný:

2021-01-06 14:32:09.9505 [ vlákno] DEBUG DEBUG LogCenter - sql príkaz: SELECT TOP (1)
    [Extent1]. [ID] AKO [ID],
    [Extent1]. [Meno] AS [Meno]
    FROM [dbo]. [Itsvse] AS [Extent1]
    KDE ([Extent1].[ Meno] = @p__linq__0) ALEBO (([Extent1].[ Name] JE NULL) A (@p__linq__0 JE NULL))
2021-01-06 14:32:09.9515 [ vlákno] DEBUG DEBUG LogCenter - sql príkaz:

2021-01-06 14:32:09.9525 [ vlákno] DEBUG DEBUG LogCenter - sql príkaz: -- p__linq__0: 'itsvse.com' (type = reťazec, veľkosť = 4000)

2021-01-06 14:32:09.9525 [ vlákno] DEBUG DEBUG LogCenter - sql príkaz: -- Spustené o 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ vlákno] DEBUG DEBUG LogCenter - sql príkaz: -- Dokončené za 1 ms s výsledkom: SqlDataReader

2021-01-06 14:32:09.9555 [ vlákno] DEBUG DEBUG LogCenter - sql príkaz:

2021-01-06 14:32:09.9555 [ vlákno] DEBUG DEBUG LogCenter - sql vyhlásenie: Uzavreté spojenie o 2021-01-06 14:32:09 +08:00
Select Query neobsahuje kľúčové slovo Nolock.

(Koniec)





Predchádzajúci:.NET/C# implementuje jednoduché logovanie založené na BlockingCollection
Budúci:Špecifikácia verejného jazyka .NET (CLS)
 Prenajímateľ| Zverejnené 6. júna 2021 o 14:53:17 |
Použiť: Pridajte nasledujúci príkaz do Application_Start() Global.cs a vygenerované SQL automaticky pridá with(nolock)
//ef命令拦截器
DbInterception.Add(new WithNoLockInterceptor());
Ak je potrebné SQL príkaz uzamknúť, pridajte nasledujúce rozšírenie


1. Opravený problém chýb regulárnych výrazov poskytovaných na internete za špeciálnych okolností

 Prenajímateľ| Zverejnené 10.1.2021 10:27:32 |
Testovanie SQL skriptov:

Výsledky testov:

Predvolene sa nepridáva žiadna transakcia a predvolená úroveň izolácie je správna:



Trvanie: 17561 milisekúnd

IsolationLevel.ReadNezaviazaná úroveň izolácie, ako je znázornené na nasledujúcom obrázku:



Čas: 519 ms

Zdroj:



 Prenajímateľ| Zverejnené 2023-5-2 o 11:45:35 |
ADO.NET nastavenia umožňujú nečisté čítanieReadUncommitted, kód je nasledovný:


Existuje aj iný spôsob, ako to napísať, dapper kód je nasledovný:

S oboma písomnými testami nie sú žiadne problémy,Odporúča sa použiť prvý priamo!!!


Ďalšie spôsoby písania:



Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com