SQL Server 2016 : Diagnostic

Tracer les attentes avec les évènements étendus

Testez gratuitement nos 1250 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Étudiez un exemple de session d'évènement. Apprenez à suivre les attentes déclenchées par une session.
07:12

Transcription

Me voici prêt à créer une session d'évènements. Je voudrais juste vous monter avant d'appuyer sur « terminer » le script ici, je vais cliquer sur « script » ce qui va générer le script derrière, je vais terminer. Je ne vais pas choisir de démarrer la session comme on me le propose, je vais attendre un peu, démarrer la session d'évènements et puis on pourrait me proposer également d'observer les données actives. Je vais le faire après coup, dans l'interface. Donc je ne fais pas ça, je ferme simplement. Il va y avoir création d'évènement qui est ici et vous voyez avec la petite icône, la flèche rouge, que c'est une session qui, pour l'instant n'est pas activée, et ça c'est intéressant, ça vous permet de créer des sessions, vous les préparez, et de ne pas les utiliser tout de suite mais d'être prêt au moment où vous en avez vraiment besoin, vous trouvez que votre serveur a des problèmes et vous voulez diagnostiquer le problème en temps réel. Vous allez ici, vous avez votre session qui est prête, clic droit, démarrer la session et puis elle va commencer à enregistrer les évènements. Donc juste un mot sur la syntaxe que vous voyez ici, assez simple : CREATE EVENT SESSION, on donne son nom. ON SERVER, et on ajoute un évènement, on donne toutes les informations de l'évènement, on met une virgule ici, on ajoute un évènement et puis on donne toutes les informations donc on ajoute les évènements les uns après les autres et ensuite on ajoute une cible donc TARGET qui est en l'occurence le ring_buffer et puis, là, on a laissé les options par défaut donc on pourrait mettre entre parenthèses certaines options et puis on dit, tu démarres pas tout de suite ton STARTUP STATE état OFF. Juste une note, vous voyez que c'est préfixé ici par package0, sqlserver, sqlos, parce que ces évènements sont contenus dans des pacakges. En fait le moteur extended events, des évènements étendus, est un moteur totalement agnostique et va charger dynamiquement des packages qui vont contenir un certain nombre d'informations. C'est pour ça que vous les voyez préfixés. Les packages par défaut, c'est-à-dire les 3 packages qui existent depuis longtemps, c'est sqlos pour sqlos, sqlserver pour le moteur d'exécution et puis le package0 qui est un package qui contient tout le reste si vous voulez c'est le package de base qui contient la plupart des fonctionnalités notamment les cibles habituelles. Donc ça c'était pour vous montrer la syntaxe vous voyez que ce n'est pas très, très compliqué. Ce qu'on fait ici, on ajoute un évènement et puis entre parenthèses, on met ces actions, c'est-à-dire ces champs globaux, je veux récupérer le sql_text de wait_info et puis WHERE donc un filtre, je veux que ce soit seulement sur les session_id 56. Et vous voyez donc que vous pouvez séparément configurer les actions et les filtres de chaque évènement, ça c'est très intéressant. On est prêt à utiliser cette requête donc je démarre ma session, je vais aussi avec un clic droit surveiller les données actives, je vais donc voir ce qui se passe dans ma zone de mémoire mon ring buffer, je vais au bon endroit, je lance la requête. Ça a prit très peu de temps vous voyez, voilà mon résultat et je reviens ici. Alors il ne se passe rien parce que le ring buffer est asynchrone et qu'il ne récupère pas tout de suite les évènements et en plus ici on ne les affiche pas tout de suite. Ce que je vais faire c'est juste arrêter la session et à ce moment-là, ça peut arriver, voilà, c'est comme ça, tous mes évènements s'affichent d'un coup. Certaines cibles sont asynchrones et pour optimiser les performances il faut parfois tricher pour pouvoir voir le résultat. J'ai ici le nom de mes évènements, j'ai ici le timestamp à une organisation par date, mon timestamp est organisé comme ceci avec des nanosecondes, vous voyez c'est quand même vraiment précis et puis j'ai pas beaucoup d'informations, vous noterez. Par exemple si je vais sur wait_info ici, je vais avoir ici évènement par évènement les informations mais c'est normal parce que vous voyez wait_info a quelques champs tandis que sql_batch_completed a beaucoup plus de champs. Chaque évènement ayant ses propres champs, c'est difficile de les afficher déjà sous forme de tableau au début. Cette interface va vous permettre de voir ici seulement deux champs: le nom et le timestamp, et puis ensuite ici les champs spécifiques. Mais c'est pas très beau, c'est pas terrible et c'est vraiment pas bien pour analyser. Ce qu'on va faire c'est faire un clic droit après coup après avoir lancé cette session, il sait quels sont les champs à disposition, je vais pouvoir maintenant faire un clic droit sur une des colonnes, dire « choisir les colonnes » et puis ajouter comme colonne supplémentaire des champs qui m'intéressent, notamment par exemple le sql_text, le wait_type, je veux le type d'attente, je vais mettre le sql_text à la fin finalement j'aurais pu le descendre, voilà voilà, et puis après le wait_type, la durée « duration » que je vais monter et puis le signal_duration, vous vous souvenez donc j'ai les mêmes informations sauf qu'ici, vous allez voir, je les ai de façon totalement détaillée, ça c'est très intéressant. Donc je vais pouvoir analyser pas à pas quelles sont les attentes qui ont été générées pour la requête. J'ai un batch_completed d'une requête système donc ça c'est pas très intéressant j'ai un batch_completed du dbcc dropcleanbuffer donc ça je m'en fiche. Maintenant ici, commence ma requête, vous voyez qu'on a changé sql_text et qu'on est sur SELECT*FROM Contact contact donc c'est ma requête qui commence, c'est ça qui m'intéresse et je vois qu'on fait d'abord des PAGEIOLATCH mais c'est normal puisqu'ici, vous vous souvenez, j'ai fait un dbcc dropcleanbuffer donc j'ai vidé le cache de données ici, les PAGEIOLATCH sont les signes que le moteur de stockage est en train de remonter les pages dans le buffer et donc c'est des lectures physiques, donc il y en a un certain nombre. Par contre je ne m'inquiète pas plus que ça puisque je vois que la durée est quand même relativement courte ici et donc je vais me dire qu'il n'y a pas de latence sur le disque. Il est normal d'avoir des PAGEIOLATCH par contre ça pose pas de problème de performance, Ok. Ensuite je vois du NETWORK_IO. NETWORK_IO c'est la même chose que a5 NETWORK_IO donc qu'est-ce qui est en train de se passer ici ? Et je vais en avoir beaucoup, je vais les suivre. Et je m'aperçois que c'est finalement une grosse partie de ce qui se passe ici jusqu'à la fin on fait du NETWORK_IO et parfois ça coûte une milliseconde donc c'est pas énorme. En fait il ne s'agit pas de millisecondes, il s'agit de microsecondes donc ça a coûté une microseconde, là vous voyez que j'ai 548 millisecondes d'exécution, une demi-seconde à peu près. Mais c'est quoi ces NETWORK_IO, vous vous souvenez et on a compris c'est là, c'est tout cet affichage qui va être généré dans la grille, ça on en a parlé mais je peux le suivre ici pas à pas donc vous voyez l'intérêt des évènements étendus c'est une capacité très poussée, très pointue d'analyser finement sql_server avec une finesse qu'on n'avait pas avant avec sql_trace et le profiler.

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 !