Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 45345|Válasz: 5

[Forrás] Entity Framework lekérdezés optimalizálása WITH(NOLOCK)

[Linket másol]
Közzétéve 2021. 01. 06. 14:52:16 | | | |
Először is, ez a cikk ésNem azzal, hogy hozzáadjuk a WITH(NOLOCK) lekérdezések teljesítményét javítvaEhelyett az adatokat a tranzakció izolációs mechanizmusán keresztül olvassák fel.

SQL Server adatbázisokban, amikor ugyanazt az adatbázis-táblát gyakran egyszerre olvassák és írják, zárolási probléma adódik, vagyis nem lehet olvasni, amíg az előző beillesztés, frissítés és törlés tranzakció be nem fejeződött, és várni kell a művelet befejezésére, mielőtt végrehajthatod a kiválasztó műveletet, hogy elkerüld az egyidejű műveleteket és a piszkos adatokat olvassák.

SELECT utasítás WITH (NOLOCK) jelzéssel a blokkolási holtpont megoldásához.

Jegyzet:A WITH(NOLOCK) használata piszkos adatolvasást eredményez

ef megjeleníti a generált SQL utasításokat
https://www.itsvse.com/thread-3813-1-1.html
A tesztkód a következő:

Használd a Func delegate-t a kód csomagolásához az alábbiakban:

Az eredmény SQL állítása a következő:

2021-01-06 14:32:09.9505 [ téma] HIBAKERESÉS LogCenter - sql utasítás: SELECT TOP (1)
    [Mérték1]. [ID] MINT [ID],
    [Mérték1]. [Név] AS [Név]
    FROM [dbo]. [Itsvse] AS [Kiterjedtség1]
    AHOL ([Extent1].[ Név] = @p__linq__0) VAGY (([Extent1].[ Név] NULLA) ÉS (@p__linq__0 NULLA))
2021-01-06 14:32:09.9515 [ téma DEBUG DEBUG LogCenter - sql nyilatkozat:

2021-01-06 14:32:09.9525 [ téma] DEBUG DEBUG LogCenter - sql utasítás: -- p__linq__0: 'itsvse.com' (type = string, size = 4000)

2021-01-06 14:32:09.9525 [ téma] DEBUG DEBUG LogCenter - sql nyilatkozat: -- Futtatás: 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ téma] DEBUG DEBUG LogCenter - sql állítás: -- 1 ms alatt kész, eredmény: SqlDataReader

2021-01-06 14:32:09.9555 [ téma] HIBAKERESÉS LogCenter - sql nyilatkozat:

2021-01-06 14:32:09.9555 [ téma] HIBAKERESÉS LogCenter - sql nyilatkozat: Zárt kapcsolat 2021-01-06 14:32:09 +08:00
A Select lekérdezés nem tartalmazza a nolock kulcsszót.

(Vége)





Előző:A .NET/C# egyszerű naplózást valósít meg a BlockingCollection alapú
Következő:.NET (CLS) köznyelvi specifikáció
 Háziúr| Közzétéve 2021. 01. 06. 14:53:17 |
Használat: Add hozzá a következő utasítást a Global.cs Application_Start() nevéhez, és a generált SQL automatikusan hozzáad (nolock)-hoz
//ef命令拦截器
DbInterception.Add(új WithNoLockInterceptor());
Ha az SQL utasítást le kell zárni, adjuk hozzá a következő kiterjesztést


1. Javították az interneten speciális körülmények között elérhető reguláris kifejezések hibaproblémáját

 Háziúr| Közzétéve 2021. 01. 10. 10:27:32 |
SQL szkriptek tesztelése:

Teszteredmények:

Alapértelmezés szerint nem adnak hozzá tranzakciót, és az alapértelmezett izolációs szint helyes:



Időtartam: 17561 milliszekundum

IsolationLevel.ReadUncommitted isolation level, ahogy az alábbi képen látható:



Idő: 519 ms

Forrás:



 Háziúr| Közzétéve 2023. 05. 02. 11:45:35 |
ADO.NET beállítások lehetővé teszik a piszkos olvasástReadUncommitted, a kód a következő:


Van egy másik módja is, hogy írjuk, a dapper kód a következő:

Mindkét írási tesztnél nincs probléma,Ajánlott közvetlenül az elsőt használni!!!


Más írásmódok:



 Háziúr| Közzétéve 2025. 12. 22. 13:26:15 |
Microsoft.Data.SqlClient.SqlException (0x80131904): A memóriaoptimalizált táblák nem támogatják a tranzakciós izolációs szintet, a "READ UNCOMMITTED"-t.
         at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
         at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
         at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
         at Microsoft.Data.SqlClient.SqlCommand.CompleteAsyncExecuteReader(Boolean isInternal, Boolean forDescribeParameterEncryption)
         at Microsoft.Data.SqlClient.SqlCommand.InternalEndExecuteNonQuery(IAsyncResult asyncResult, Boolean isInternal, String endMethod)
         at Microsoft.Data.SqlClient.SqlCommand.EndExecuteNonQueryInternal(IAsyncResult asyncResult)
         at Microsoft.Data.SqlClient.SqlCommand.EndExecuteNonQueryAsync(IAsyncResult asyncResult)
         at System.Threading.Tasks.TaskFactory'1.FromAsyncCoreLogic(IAsyncResult iar, Func'2 endFunction, Action'1 endAction, Task'1 promise, Boolean relegesSynchronization)

SqlTransaction és TransactionScope szivárgás izolációs szintjei(A.)A hiba már 8 éve létezik, eddig nem javították! Azt hiszem, sokan érintettek anélkül, hogy észrevennék:A hiperlink bejelentkezés látható.
Az SQL utasítást a jelenlegi session izolációs szintjén a következőképpen kérdezzük:

 Háziúr| Közzétéve 2025. 12. 23. 8:53:39 |
A ReadUncommitted BeginTransaction használata piszkos olvasásokat okozhat a tranzakción kívüli lekérdezéseknél:A hiperlink bejelentkezés látható.
Amikor a kapcsolat zárul, a tranzakciós izolációs szint nem áll vissza:A hiperlink bejelentkezés látható.
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com