Především tento článek aNe přidáním WITH(NOLOCK) pro zlepšení výkonu dotazůMísto toho jsou data čtena skrze izolační mechanismus transakce.
V databázích SQL Serveru, když je stejná databázová tabulka často čtena a zapisována současně, dochází k problému se zablokováním, tedy nelze číst, dokud není dokončena předchozí transakce vložení, aktualizace a mazání, a musíte počkat, až operace bude dokončena, než můžete provést operaci select, abyste zabránili souběžným operacím a čtení špinavých dat.
Příkaz SELECT pomocí WITH (NOLOCK) k vyřešení blokovacího zablokování.
Poznámka:Použití WITH(NOLOCK) vede k nekvalitnímu čtení dat。
Testovací kód je následující:
Použijte Func delegate k zabalení kódu následovně:
Výsledný SQL příkaz je následující:
2021-01-06 14:32:09.9505 [ vlákno] DEBUG DEBUG LogCenter - sql příkaz: SELECT TOP (1) [Extent1]. [ID] JAKO [ID], [Extent1]. [Jméno] AS [Jméno] FROM [dbo]. [Itsvse] AS [Extent1] KDE ([Extent1].[ Název] = @p__linq__0) NEBO (([Extent1].[ Název] JE NULL) A (@p__linq__0 JE NULL)) 2021-01-06 14:32:09.9515 [ vlákno] DEBUG DEBUG LogCenter - sql příkaz:
2021-01-06 14:32:09.9525 [ vlákno] DEBUG DEBUG LogCenter - sql příkaz: -- p__linq__0: 'itsvse.com' (type = string, size = 4000)
2021-01-06 14:32:09.9525 [ vlákno] DEBUG DEBUG LogCenter - sql příkaz: -- Spuštěno dne 2021-01-06 14:32:09 +08:00
2021-01-06 14:32:09.9545 [ vlákno] DEBUG DEBUG LogCenter - sql příkaz: -- Dokončeno za 1 ms s výsledkem: SqlDataReader
2021-01-06 14:32:09.9555 [ vlákno] DEBUG DEBUG LogCenter - sql příkaz:
2021-01-06 14:32:09.9555 [ vlákno] DEBUG DEBUG LogCenter - sql příkaz: Uzavřené spojení dne 2021-01-06 14:32:09 +08:00 Select dotaz neobsahuje klíčové slovo nolock.
(Konec)
|