web-dev-qa-db-fra.com

Le type d'attente ASYNC_NETWORK_IO doit-il inquiéter?

En regardant la liste des procédures stockées qui prennent beaucoup de temps à exécuter, on se démarque comme causant le plus d'attente. Cependant, la plupart de cette attente (81%) est ASYNC_NETWORK_IO et je sais pourquoi: la procédure stockée transfère environ 400 Mo d'informations.

Dans la documentation, il indique que la cause de ASYNC_NETWORK_IO est que le client ne peut pas suivre le flot de données et c'est probablement vrai. Je ne sais pas comment inciter le client à suivre, car il ne fait qu'appeler la procédure stockée via un ADO.NET et ensuite simplement traiter l'ensemble de données.

Donc, étant donné ces informations, dois-je m'inquiéter du type d'attente ASYNC_NETWORK_IO pour cette procédure? Cela a-t-il réellement un effet sur les performances du serveur?

Informations supplémentaires:

  • Je suis sur le Service Pack 2 de SQL Server 2005.
  • L'application client est sur la même case que SQL Server (je sais, je sais ... mais je ne peux rien y faire).
16
AngryHacker

Comme vous l'avez dit, ce type d'attente indique que l'application ne suit pas SQL Server. Maintenant, cela signifie vraiment que SQL Server ne peut pas envoyer les données sur le réseau aussi rapidement qu'il le souhaiterait.

Il peut y avoir deux causes sous-jacentes:

  1. L'application est écrite de manière inefficace et ne traite pas les lignes assez rapidement.
  2. Le réseau est au maximum.

Si l'application elle-même est trop lente, il n'y aura pas ou pas d'impact significatif sur les performances des autres requêtes. Si par contre le tube est trop petit, les autres requêtes ne peuvent pas envoyer leurs résultats non plus et doivent attendre.

Dans ce dernier cas cependant, vous auriez toutes les connexions en attente sur ASYNC_NETWORK_IO. Vous devriez pouvoir voir clairement cet impact.

14
Sebastian Meine