Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 44050|Odpověď: 3

[Zdroj] Optimalizace dotazů v rámci entity s POMOCÍ NOLOCK)

[Kopírovat odkaz]
Zveřejněno 6. 1. 2021 14:52:16 | | | |
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

ef zobrazuje generované SQL příkazy
https://www.itsvse.com/thread-3813-1-1.html
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)





Předchozí:.NET/C# implementuje jednoduché logování založené na BlockingCollection
Další:Specifikace veřejného jazyka .NET (CLS)
 Pronajímatel| Zveřejněno 6. 1. 2021 14:53:17 |
Použijte: Přidejte následující příkaz do Application_Start() Global.cs a vygenerovaný SQL automaticky přidá with(nolock)
//ef命令拦截器
DbInterception.Add(new WithNoLockInterceptor());
Pokud je potřeba SQL příkaz uzamknout, přidejte následující rozšíření


1. Opraven problém chyb regulárních výrazů poskytovaných na internetu za zvláštních okolností

 Pronajímatel| Zveřejněno 10. 1. 2021 10:27:32 |
Testování SQL skriptů:

Výsledky testů:

Ve výchozím nastavení se žádná transakce nepřidává a výchozí úroveň izolace je správná:



Délka: 17561 milisekund

IsolationLevel.ReadNezavázaná úroveň izolace, jak je znázorněno na následujícím obrázku:



Čas: 519 ms

Zdroj:



 Pronajímatel| Zveřejněno 2023-5-2 11:45:35 |
ADO.NET nastavení umožňuje nekvalitní čteníReadUncommitment, kód je následující:


Existuje i jiný způsob, jak to napsat, dapper kód je následující:

S oběma písemnými testy nejsou žádné problémy,Doporučuje se používat první přímo!!!


Další způsoby psaní:



Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com