Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 44050|Odpowiedź: 3

[Źródło] Optymalizacja zapytań w ramach Entity Framework WITH(NOLOCK)

[Skopiuj link]
Opublikowano 6 lutego 2021 o 14:52:16 | | | |
Przede wszystkim ten artykuł iNie przez dodanie WITH(NOLOCK) w celu poprawy wydajności zapytańZamiast tego dane są odczytywane przez mechanizm izolacji transakcji.

W bazach danych SQL Server, gdy ta sama tabela jest często czytana i zapisywana jednocześnie, pojawia się problem blokady, czyli nie można odczytać, dopóki poprzednia transakcja wstaw, aktualizacja i usuń nie zostanie zakończona, a przed wykonaniem tej operacji trzeba poczekać na zakończenie operacji, aby zapobiec operacjom współbieżnym i odczytowi brudnych danych.

Instrukcja SELECT z WITH (NOLOCK), aby rozwiązać blokadę blokującą.

Nuta:Użycie WITH(NOLOCK) skutkuje nieczystym odczytem danych

ef wyświetla wygenerowane instrukcje SQL
https://www.itsvse.com/thread-3813-1-1.html
Kod testu jest następujący:

Użyj Func delegate, aby zapakować kod w następujący sposób:

Powstałe polecenie SQL brzmi następująco:

2021-01-06 14:32:09.9505 [ wątek] DEBUG DEBUG LogCenter - sql oświadczenie: SELECT TOP (1)
    [Extent1]. [ID] JAKO [ID],
    [Extent1]. [Imię] AS [Imię]
    FROM [dbo]. [Itsvse] AS [Zakres1]
    GDZIE ([Extent1].[ Nazwa] = @p__linq__0) LUB (([Extent1].[ Nazwa] JEST NULL) ORAZ (@p__linq__0 JEST NULL))
2021-01-06 14:32:09.9515 [ wątek] DEBUG DEBUG LogCenter - sql oświadczenie:

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

2021-01-06 14:32:09.9525 [ wątek] DEBUG DEBUG LogCenter - sql polecenie: -- Wykonywane o 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ wątek] DEBUG DEBUG LogCenter - sql polecenie: -- Ukończone w 1 ms z wynikiem: SqlDataReader

2021-01-06 14:32:09.9555 [ wątek] DEBUG DEBUG LogCenter - sql oświadczenie:

2021-01-06 14:32:09.9555 [ wątek] DEBUG DEBUG LogCenter - sql oświadczenie: Zamknięte połączenie o 2021-01-06 14:32:09 +08:00
Zapytanie Select nie zawiera słowa kluczowego Nolock.

(Koniec)





Poprzedni:.NET/C# implementuje proste logowanie oparte na BlockingCollection
Następny:Specyfikacja języka publicznego .NET (CLS)
 Ziemianin| Opublikowano 2021-1-6 o 14:53:17 |
Użyj: Dodaj następujące zdanie do Application_Start() Global.cs, a wygenerowany SQL automatycznie doda with(nolock)
//ef命令拦截器
DbInterception.Add(nowy WithNoLockInterceptor());
Jeśli polecenie SQL musi być zablokowane, dodaj następujące rozszerzenie


1. Naprawiono problem błędów wyrażeń regularnych udostępnianych w Internecie w szczególnych okolicznościach

 Ziemianin| Opublikowano 2021-1-10 10:27:32 |
Testowanie skryptów SQL:

Wyniki testów:

Domyślnie nie dodaje się żadnej transakcji, a domyślny poziom izolacji jest poprawny:



Czas trwania: 17561 milisekund

IsolationLevel.ReadNiezaangażowany poziom izolacji, jak pokazano na poniższym obrazku:



Czas: 519 ms

Źródło:



 Ziemianin| Opublikowano 2023-5-2 11:45:35 |
ADO.NET ustawienia pozwalają na brudne odczytyReadUncommitted, kod jest następujący:


Jest inny sposób napisania, kod dapper wygląda następująco:

Nie ma problemów z obiema testami pisemnymi,Zaleca się bezpośrednie korzystanie z pierwszego!!!


Inne sposoby pisania:



Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com