SQL Server 2016 : Diagnostic

Découvrir les types d'attente

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Les tâches en attente publient la raison de leur attente. Apprenez à exploiter cette information importante pour le diagnostic.
05:10

Transcription

Il est temps d'aborder un certain nombre de types d'attente qui sont assez classiques et que vous rencontrerez dans vos opérations de diagnostic sur SQL Server. Et vous voyez, même sur ma machine qui n'est pas du tout une machine de production, eh bien, j'ai quand même quelques attentes déjà, et je vois des attentes que j'ai l'habitude de voir. Ça peut être des verrous, bon ça, c'est parce que j'en ai généré un. Ça peut être « PAGEIOLATCH », ça peut être « ASYNC_NETWORK_IO ». Ce sont des types d'attente vraiment spécifiques, que vous allez le voir souvent. Donc, ne vous laissez pas submerger par les types d'attente, en disant, il y en a des centaines et des centaines, je ne vais pas réussir à comprendre, parce que finalement, vous n'en verrez qu'une petite partie, et ce sera très souvent les mêmes. C'est ce que je vais vous montrer dans cette vidéo. J'ai fait une requête assez simple ici pour isoler les types d'attente les plus classiques. Donc, j'ai pris quelques « wait_type » et je vais exécuter ma requête, juste pour vous les montrer les uns après les autres. Donc ça, c'est très classique. Et puis, tout simplement, je vais les prendre dans l'ordre alphabétique. « ASYNC_NETWORK_IO », qu'est-ce que ça veut dire ? « ASYNC », ça veut dire « asynchrone », « NETWORK », c'est le réseau, « IO », les entrées/sorties. Donc, c'est du trafic réseau. On a eu un certain nombre d'attentes sur du trafic réseau. Regardez, 7533, je vais faire quelque chose, une nouvelle requête... ... avec un « SELECT * FROM Contact.Contact », OK. Donc, vous vous souvenez ici, 7533 et 4320 en « wait_time », c'est parti. OK. J'y retourne, je relance. 7816 et 5128 en « wait_time », donc ça veut dire que très problablement la requête que j'ai exécutée a généré de l'attente sur le réseau. C'est très bizarre, non ? Parce que la requête que j'ai exécutée ici, elle m'a donné des résultats et en fait, je suis en local, c'est-à-dire que la requête, je la saisis sur ma machine ici, je vais interroger un serveur SQL qui est sur la même machine, donc, il n'y a pas de réseau. En plus, le protocole réseau qui est utilisé s'appelle la « mémoire partagée », donc on ne passe pas du tout par un réseau physique. Qu'est-ce qui s'est passé ? Il s'est passé que ce résultat, qui est affiché par l'outil, ici Management Studio, est affiché dans une grid et que derrière, c'est fait en .NET, et que .NET utilise une bibliothèque qui s'appelle « ADO.NET » pour récupérer les résultats de SQL Server. Cette bibliothèque ADO.NET comporte un composant, je vais le chercher ici d'ailleurs, qui s'appelle le « DataReader ». Le DataReader, je prends une page ici au hasard, ça ne me paraît pas mal, dans le MSDN. Eh bien, le DataReader applique la création, etc. et vous obtenez une ligne à partir des résultats de la requête. Le DataReader est un objet dit connecté. Donc, ça veut dire que si je récupère des informations ici, et je veux les afficher dans une grid avec dans le code client un DataReader, je vais faire une boucle pour afficher peut-être ligne par ligne, et cette boucle va rester connectée à SQL Server pendant toute l'opération d'affichage. Qu'est-ce qui va se passer ? Le client récupère petit à petit les informations de SQL Server, il traite chaque paquet qu'il reçoit, et lorsque le paquet est traité, il va envoyer un message de validation, d'acknowledgement, à SQL Server, pour lui dire : « OK, j'ai terminé de traiter ce paquet, envoie-moi le suivant », puisque c'est un objet connecté. Si la boucle dans l'application client est trop longue, eh bien, ça va générer un délai qui fait que SQL Server va être en train d'attendre sur la validation du client, sur le message d'acknowledgement. Et donc, qu'est-ce que le serveur attend ? Parce que le client lui-même ne renvoie pas suffisamment rapidement la demande du paquet suivant. Donc, c'est normal d'avoir du NETWORK_IO, vous en aurez toujours. Le problème, c'est quand ça devient un petit peu trop important. Ici, vous avez un « wait_time » qui est important par rapport au nombre d'attentes. Ça veut dire qu'il pourrait y avoir du code client qui a été peut-être insuffisamment optimisé, qui fait une boucle sur un DataReader, qui est trop longue, et qui demande trop lentement les informations à SQL Server. Ça vous permet d'identifier peut-être un problème de programmation client. Si vous avez ce genre de problèmes, regardez avec vos développeurs s'ils ont vraiment fait des boucles de DataReader un peu longues, demandez-leur de les optimiser. Éventuellement dans certains cas, vous pouvez leur proposer d'utiliser un objet qui s'appelle « DataTable » ou « DataSet », qui sont des objets déconnectés, qui cachent le résultat au niveau du client pour utiliser ce cache dans la boucle. Ça, c'est un cas assez classique, ce n'est pas forcément un problème dans tous les cas, mais un peu comme toutes les attentes d'ailleurs, c'est un problème quand c'est volumineux ici, quand vous avez beaucoup d'attente en millisecondes par rapport au nombre d'attentes, donc vous faites la moyenne et vous voyez à peu près sur la moyenne si c'est quelque chose de problématique. Si ça reste de l'ordre de quelques millisecondes en moyenne, ce n'est pas extraordinairement problématique.

SQL Server 2016 : Diagnostic

Prenez en main les outils de diagnostic intégrés à SQL Server. Soyez en mesure de comprendre et d'analyser les problèmes de performance rencontrés le plus fréquemment.

1h58 (20 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :14 déc. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !