Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 45345|Répondre: 5

[Source] Optimisation des requêtes du Entity Framework AVEC(NOLOCK)

[Copié le lien]
Publié sur 06/01/2021 14:52:16 | | | |
Tout d’abord, cet article etPas en ajoutant WITH(NOLOCK) pour améliorer la performance des requêtesAu lieu de cela, les données sont lues via le mécanisme d’isolation de la transaction.

Dans les bases de données SQL Server, lorsque la même table de base de données est fréquemment lue et écrite en même temps, il y aura un problème de verrouillage, c’est-à-dire que vous ne pouvez pas lire avant que la transaction précédente d’insertion, mise à jour et suppression ne soit pas terminée, et vous devez attendre que l’opération soit terminée avant de pouvoir effectuer l’opération de sélection, afin d’empêcher les opérations concurrentes et la lecture de données défectueuses.

SELECT avec WITH (NOLOCK) pour résoudre le blocage de blocage.

Note:Utiliser WITH(NOLOCK) entraînera une lecture de données défectueuse

ef affiche les instructions SQL générées
https://www.itsvse.com/thread-3813-1-1.html
Le code de test est le suivant :

Utilisez Func delegate pour emballer le code comme suit :

L’instruction SQL résultante est la suivante :

2021-01-06 14:32:09.9505 [ thread] DEBUG DEBUG LogCenter - instruction sql : SELECT TOP (1)
    [Étendue 1]. [ID] COMME [ID],
    [Étendue 1]. [Nom] AS [Nom]
    DE [dbo]. [Itsvse] EN TANT [Étendue 1]
    OÙ ([Étendue1].[ Nom] = @p__linq__0) OU (([Étendue1].[ Name] EST NULLE) ET (@p__linq__0 EST NUL))
2021-01-06 14:32:09.9515 [ thread] DEBUG DEBUG LogCenter - instruction sql :

2021-01-06 14:32:09.9525 [ thread] DEBUG DEBUG LogCenter - instruction sql : -- p__linq__0 : 'itsvse.com' (type = chaîne, taille = 4000)

2021-01-06 14:32:09.9525 [ thread] DEBUG DEBUG LogCenter - instruction sql : -- Exécution à 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ thread] DEBUG DEBUG LogCenter - instruction sql : -- Terminé en 1 ms avec résultat : SqlDataReader

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

2021-01-06 14:32:09.9555 [ thread] DEBUG DEBUG LogCenter - instruction sql : Connexion fermée à 2021-01-06 14:32:09 +08:00
Select Query n’inclut pas le mot-clé nolock.

(Fin)





Précédent:.NET/C# implémente une journalisation simple basée sur BlockingCollection
Prochain:Spécification du langage public .NET (CLS)
 Propriétaire| Publié sur 06/01/2021 14:53:17 |
Utiliser : Ajouter l’instruction suivante à la Application_Start() du Global.cs, et le SQL généré ajoutera automatiquement with(nolock)
//ef命令拦截器
DbInterception.Add(nouveau WithNoLockInterceptor()) ;
Si l’instruction SQL doit être verrouillée, ajoutez l’extension suivante


1. Résolu le problème d’erreur des expressions régulières fournies sur Internet dans des circonstances particulières

 Propriétaire| Publié sur 10/01/2021 10:27:32 |
Tester les scripts SQL :

Résultats des tests :

Aucune transaction n’est ajoutée par défaut, et le niveau d’isolation par défaut est correct :



Durée : 17561 millisecondes

IsolationLevel.ReadUncommitted niveau d’isolation, comme montré sur l’image suivante :



Temps : 519 ms

Source:



 Propriétaire| Publié sur 02/05/2023 11:45:35 |
ADO.NET réglages permettent une lecture saleReadUncommitted, le code est le suivant :


Il existe une autre façon de l’écrire, le code élégant est le suivant :

Il n’y a aucun problème avec les deux tests d’écriture,Il est recommandé d’utiliser directement le premier!!!


Autres façons d’écrire :



 Propriétaire| Publié sur 22/12/2025 13:26:15 |
Microsoft.Data.SqlClient.SqlException (0x80131904) : Les tables optimisées en mémoire ne prennent pas en charge le niveau d’isolation des transactions « READ UNCOMMITTED ».
         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 requiresSynchronization)

Niveaux d’isolement des fuites de SqlTransaction et TransactionScope(Le.)Le virus existe depuis 8 ans, jusqu’à présent, elle n’a pas été réparée ! Je suppose que beaucoup de gens pourraient être affectés sans s’en rendre compte) :La connexion hyperlientérée est visible.
Interrogez l’instruction SQL au niveau d’isolation de session actuel comme suit :

 Propriétaire| Publié sur 23/12/2025 08:53:39 |
L’utilisation de ReadUncommitted BeginTransaction peut provoquer des lectures compromettantes pour les requêtes hors transaction :La connexion hyperlientérée est visible.
Lorsque la connexion est fermée, le niveau d’isolement de la transaction n’est pas réinitialisé :La connexion hyperlientérée est visible.
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com