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 majeure partie 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 faire pour que le client continue 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).
Réponses:
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:
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.
la source
var dataSet = new DataSet();
var da = new SqlDataAdapter(command);
da.Fill(dataSet);
Je ne sais donc pas exactement ce qui pourrait être lent.