SQL Server 2016 : Diagnostic

Visualiser les attentes en cours

Testez gratuitement nos 1246 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Les vues de gestion dynamique permettent de voir les tâches en attente. Apprenez ici à les exploiter.
05:12

Transcription

Voyons ces notions d'attente de façon pratique. Donc, je suis dans SQL Server et je voudrais voir les attentes en cours. Vous vous en doutez, une petite vue de gestion dynamique peut-être ? Bien sûr. Donc, « SELECT * FROM sys.dm_ » et les attentes, c'est le scheduler, donc on est dans SQL OS, donc « os_ » et puis on va avoir « wait ». Alors « l'attente » en anglais, c'est bien sûr « wait », et vous voyez qu'ici mon outil, qui s'appelle « SQL Complete », qui est un outil tiers que vous pouvez obtenir gratuitement d'ailleurs, il y a une version gratuite qui est très pratique et qui remplace avantageusement l'IntelliSense de Management Studio. Donc entre parenthèses, c'est une société qui s'appelle « Devart ». Donc, « sys.dm_os_wait », j'ai deux choses qui commencent par « wait », donc « wait », « attente » bien sûr. J'ai « wait_stats », on va le voir juste après, et j'ai « waiting_tasks ». Alors, vous imaginez bien les tâches en train d'attendre, ça m'intéresse. Alors, je vais regarder « waiting_tasks ». Voici une liste des tâches qui sont actuellement, au moment où j'ai lancé la requête, s'entend, en train d'attendre. Vous voyez qu'il y en a beaucoup. Alors, concentrez-vous sur ceci. Le « session_id », l'ID de session. C'est un identifiant qui est donné à chaque session ouverte dans SQL Server par un client. Il y a des numéros de session, et il se trouve que tous les numéros qui sont en dessous de 51, c'est-à-dire, vous voyez jusqu'à 50 ici, sont en fait des sessions système, donc ce ne sont pas des sessions utilisateurs. On peut sans aucun problème, les retirer de notre liste. Je vais formater un petit peu ça, donc je peux dire « WHERE », « session_id 50 », par exemple, OK. Donc, voici une liste des sessions utilisateurs en train d'attendre. Bon, ça tombe bien, ou mal, il n'y en a pas, puisqu'ici je suis sur ma machine et ce n'est pas un machine de production. Je vais faire une nouvelle requête, je vais provoquer une attente, c'est assez simple. Par exemple, une attente sur un verrou, c'est un type d'attente évidemment. Je me fais une petite transaction. Je vais faire un update de mes contacts... ...en changeant le nom en « UPPER » de nom... ...donc, facile. Et puis comme je suis dans une transaction, eh bien, j'ai verrouillé toute ma table finalement, et puis j'ai conservé le verrou, puisque je n'ai pas encore fait de « COMMIT » ou de « ROLLBACK » de ma transaction. Je me prépare à faire un « ROLLBACK » pour plus tard, mais maintenant, je vais surtout faire un « SELECT » de « Contact.Contact ». Voilà, et manifestement vous voyez, l'exécution de la requête est en cours ici. Et puis, elle va être en cours pendant très longtemps, puisque je suis en train d'attendre sur la libération du verrou. Bien évidemment, s'il y a un verrou, et que cette requête est en train d'attendre, la tâche elle-même, le worker, va dire « Je suis en train d'attendre », et l'ordonnanceur va le mettre dans la file Waiter, et on va voir ça ici. Voilà. Ma « session_id » 62, vous voyez qu'elle est là, et bien, elle est en train d'attendre depuis 26 secondes. Puisqu'ici c'est une durée en milliseconde, donc 26 000 millisecondes, 26 secondes. Là, c'était au moment où j'ai lancé la requête bien sûr, maintenant ça serait encore plus. Vous voyez qu'il y a un type d'attente, et ça c'est très intéressant, on sait sur quel type de ressources, sur quoi on est en train d'attendre, donc on peut l'analyser. En plus, dans « waiting_tasks », l'attente sur un verrou s'appelle un « blocage ». C'est un type d'attente particulier finalement, et on appelle ce type d'attente particulier, un « blocage ». Pourquoi ? Parce qu'on est bloqué par quelqu'un. On est bloqué par quelqu'un d'autre et on ne sait pas vraiment quand ça va s'arrêter. Dans ce cas, on a ici l'information de « blocking_session_id ». On sait quelle est la session qui bloque l'autre. Donc c'est assez simple, j'ai ici, alors je vous le montre comme ceci, la session 60... ...bloque la session 62. OK, facile. Donc, la session 62 qui est ici est en exécution et elle est en attente de la session 60 qui manifestement continue à maintenir un verrou, on est en type « LCK », pour « LOCK », sur une ressource, donc voici l'adresse, ça, ce n'est pas très important pour nous, et je suis toujours en train d'attendre sur elle. Et si je relance ma requête... ...voilà, maintenant ça fait 156 secondes que j'attends, ça commence à être un peu long. Donc, vous allez avoir ici sur un serveur de production peut-être quelques lignes d'attente, régulièrement, et c'est souvent les mêmes types. Cela va vous permettre d'identifier petit à petit sur quels types d'attente vos requêtes sont le plus souvent ralenties, et donc, qu'est-ce qu'il faut régler, quels problèmes il faut aborder sur ce serveur, ou sur ces requêtes.

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 !