La semaine dernière, quelque chose d'étrange s'est produit dans notre base de données. Tout d'un coup, l'application a été bloquée pour nos utilisateurs qui n'ont pas pu enregistrer de nouvelles entités, etc. Après avoir regardé le moniteur d'activité de SQL Server (2008 avec le mode de compatibilité 2005), j'ai vu les trois entrées suivantes:
Après un certain temps, les utilisateurs ont obtenu un délai de connexion. Lorsque j'ai tué le processus 64, ils pouvaient à nouveau enregistrer normalement.
Le problème est que les entités qu'ils ont essayé d'enregistrer pendant le bloc ont été insérées dans la base de données plus d'une fois (jusqu'à 3 fois) même s'il existe du code qui devrait empêcher cela de se produire (colonne de numéro qui doit être unique mais sans contrainte) ... la vérification a lieu dans le code).
Nous utilisons Entity Framework 6.0.
- L'un de vous sait-il pourquoi et quand ces types d'attente ASYNC_NETWORK_IO se produisent et comment les éviter?
- Et que signifient-ils exactement?
la source
Réponses:
ASYNC_NETWORK_IO
indique en quelque sorte que l'application cliente ne traite pas les résultats aussi rapidement que SQL Server les alimente. Cela peut être dû à un problème avec l'application cliente ou avec la connexion réseau entre le serveur et l'application cliente.Veuillez vous référer à un article de Thomas LaRock
ou ce post de Joe Sack
Puisque vous utilisez
entity framework
ce message de Brent Ozar, cela peut aussi être utilela source
Il existe certaines idées fausses concernant le type d'attente ASYNC_NETWORK_IO, principalement en raison du nom qui indique le problème de réseau, mais la raison de ce type d'attente est assez rare.
Des attentes ASYNC_NETWORK_IO excessives peuvent se produire dans deux scénarios:
La session doit attendre que l'application cliente traite les données reçues de SQL Server pour envoyer le signal à SQL Server qu'elle peut accepter de nouvelles données pour le traitement. Il s'agit d'un scénario courant qui peut refléter une mauvaise conception d'application et est la cause la plus fréquente de valeurs de type d'attente ASYNC_NETWORK_IO excessives.
Cela implique d'étudier l'application qui provoque les valeurs excessives du type d'attente ASYNC_NETWORK_IO et souvent de coordonner avec les développeurs d'applications qui l'ont créée.
La bande passante réseau est maximisée. Un Ethernet obstrué entraînera la lente transmission des données dans les deux sens depuis l'application. Cela, en soi, dégradera l'efficacité de l'application.
Beaucoup plus de détails peuvent être trouvés sur cette page
la source