Zunächst einmal dieser Artikel undNicht durch das Hinzufügen von WITH(NOLOCK) zur Verbesserung der AbfrageleistungStattdessen werden die Daten durch den Isolationsmechanismus der Transaktion gelesen.
In SQL-Server-Datenbanken gibt es ein Sperrproblem, wenn die gleiche Datenbanktabelle häufig gleichzeitig gelesen und geschrieben wird, das heißt, man kann erst lesen, wenn die vorherige Insert-, Update- und Delete-Transaktion abgeschlossen ist, und man muss warten, bis die Operation abgeschlossen ist, bevor man die Select-Operation ausführen kann, um gleichzeitige Operationen und das Lesen von Dirty Data zu verhindern.
SELECT-Anweisung mit WITH (NOLOCK), um den blockierenden Deadlock zu lösen.
Anmerkung:Die Verwendung von WITH(NOLOCK) führt zu unsauberen Datenlesungen。
Der Testcode ist wie folgt:
Verwenden Sie Func Delegate, um den Code wie folgt zu paketieren:
Die resultierende SQL-Anweisung lautet wie folgt:
2021-01-06 14:32:09.9505 [ Thread] DEBUG DEBUG LogCenter - SQL-Anweisung: SELECT TOP (1) [Extent1]. [ID] ALS [ID], [Extent1]. [Name] AS [Name] VON [dbo]. [Itsvse] AS [Extent1] WO ([Extent1].[ Name] = @p__linq__0) ODER (([Extent1].[ Name] IST NULL) UND (@p__linq__0 IST NULL)) 2021-01-06 14:32:09.9515 [ Thread] DEBUG DEBUG LogCenter - SQL-Anweisung:
2021-01-06 14:32:09.9525 [ Thread] DEBUG DEBUG LogCenter - SQL-Anweisung: -- p__linq__0: 'itsvse.com' (Typ = Zeichenkette, Größe = 4000)
2021-01-06 14:32:09.9525 [ Thread] DEBUG DEBUG LogCenter - SQL-Anweisung: -- Ausgeführt am 06.01.2021 14:32:09 +08:00
2021-01-06 14:32:09.9545 [ Thread] DEBUG DEBUG LogCenter - SQL-Anweisung: -- In 1 ms abgeschlossen mit Ergebnis: SqlDataReader
2021-01-06 14:32:09.9555 [ Thread] DEBUG DEBUG LogCenter - SQL-Anweisung:
2021-01-06 14:32:09.9555 [ Thread] DEBUG DEBUG LogCenter - SQL-Anweisung: Verbindung geschlossen am 06.01.2021 14:32:09 +08:00 Select-Abfrage enthält das Nolock-Schlüsselwort nicht.
(Ende)
|