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。
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)
|