Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 45345|Risposta: 5

[Fonte] Ottimizzazione delle query del Entity Framework WITH(NOLOCK)

[Copiato link]
Pubblicato su 06/01/2021 14:52:16 | | | |
Prima di tutto, questo articolo eNon aggiungendo WITH(NOLOCK) per migliorare le prestazioni delle queryInvece, i dati vengono letti attraverso il meccanismo di isolamento della transazione.

Nei database SQL Server, quando la stessa tabella del database viene frequentemente letta e scritta contemporaneamente, si verifica un problema di blocco, cioè non si può leggere fino al completamento della precedente transazione di inserimento, aggiornamento e cancellazione, e bisogna attendere che l'operazione sia completata prima di poter eseguire l'operazione di selezione, al fine di prevenire operazioni concorrenti e leggere dati sporchi.

istruzione SELECT con WITH (NOLOCK) per risolvere il deadlock bloccante.

Nota:Usare WITH(NOLOCK) comporterà una lettura dei dati sporca

ef visualizza le istruzioni SQL generate
https://www.itsvse.com/thread-3813-1-1.html
Il codice di prova è il seguente:

Usa Func delegate per impacchettare il codice come segue:

L'istruzione SQL risultante è la seguente:

2021-01-06 14:32:09.9505 [thread] DEBUG DEBUG LogCenter - istruzione sql: SELECT TOP (1)
    [Estensione 1]. [ID] COME [ID],
    [Estensione 1]. [Nome] COME [Nome]
    DA [dbo]. [Itsvse] COME [Estensione1]
    DOVE ([Estensione1].[ Nome] = @p__linq__0) OPPURE (([Estensione1].[ Name] È NULLO) E (@p__linq__0 È NULL))
2021-01-06 14:32:09.9515 [thread] DEBUG DEBUG LogCenter - istruzione sql:

2021-01-06 14:32:09.9525 [thread] DEBUG DEBUG LogCenter - istruzione sql: -- p__linq__0: 'itsvse.com' (tipo = stringa, dimensione = 4000)

2021-01-06 14:32:09.9525 [thread] DEBUG DEBUG LogCenter - istruzione sql: -- In esecuzione al 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [thread] DEBUG DEBUG LogCenter - istruzione sql: -- completato in 1 ms con risultato: SqlDataReader

2021-01-06 14:32:09.9555 [thread] DEBUG DEBUG LogCenter - istruzione sql:

2021-01-06 14:32:09.9555 [thread] DEBUG DEBUG LogCenter - istruzione sql: Connessione chiusa al 2021-01-06 14:32:09 +08:00
Selezione Query non include la parola chiave nolock.

(Fine)





Precedente:.NET/C# implementa una semplice registrazione basata su BlockingCollection
Prossimo:Specifica del linguaggio pubblico .NET (CLS)
 Padrone di casa| Pubblicato su 06/01/2021 14:53:17 |
Utilizza: Aggiungi la seguente istruzione al Application_Start() del Global.cs, e il SQL generato aggiungerà automaticamente with(nolock)
//ef命令拦截器
DbInterception.Add(nuovo WithNoLockInterceptor());
Se l'istruzione SQL deve essere bloccata, aggiungi la seguente estensione


1. Risolto il problema degli errori delle espressioni regolari fornite su Internet in circostanze particolari

 Padrone di casa| Pubblicato su 10/01/2021 10:27:32 |
Test degli script SQL:

Risultati del test:

Nessuna transazione viene aggiunta di default e il livello di isolamento predefinito è corretto:



Durata: 17561 millisecondi

IsolationLevel.ReadUncommitted livello di isolamento, come mostrato nell'immagine seguente:



Tempo: 519 ms

Fonte:



 Padrone di casa| Pubblicato su 02/05/2023 11:45:35 |
ADO.NET impostazioni permettono letture sporcheReadUncommitted, il codice è il seguente:


C'è un altro modo per scriverlo, il codice dapper è il seguente:

Non ci sono problemi con entrambi i test di scrittura,Si consiglia di usare direttamente il primo!!!


Altri modi di scrivere:



 Padrone di casa| Pubblicato su 22/12/2025 13:26:15 |
Microsoft.Data.SqlClient.SqlException (0x80131904): Le tabelle ottimizzate per la memoria non supportano il livello di isolamento delle transazioni "READ UNCOMMITTED".
         at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
         presso 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, StringStringRisetOptions, 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 requiresSynchronization)

Livelli di isolamento delle perdite di SqlTransaction e TransactionScope(Il.)Il virus esiste da 8 anni, finora non è stato riparato! Immagino che molte persone possano essere colpite senza rendersene conto):Il login del link ipertestuale è visibile.
Consulta l'istruzione SQL al livello di isolamento della sessione attuale come segue:

 Padrone di casa| Pubblicato su 23/12/2025 08:53:39 |
L'uso di ReadUncommitted BeginTransaction può causare letture sporche per query fuori dalla transazione:Il login del link ipertestuale è visibile.
Quando la connessione è chiusa, il livello di isolamento della transazione non viene resettato:Il login del link ipertestuale è visibile.
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com