Nous mettrons à jour notre Politique de confidentialité prochainement. En voici un aperçu.

SQL Server 2016 : Diagnostic

Aborder l'attente SOS_SCHEDULER_YIELD

Testez gratuitement nos 1341 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Lorsqu'un worker a atteint son quantum, il laisse sa place. Cette opération déclenche l'attente de type SOS_SCHEDULER_YIELD. Découvrez le fonctionnement de cette attente.
05:16

Transcription

Il y a un autre type d'attente un peu particulier que je voudrais vous montrer, parce que vous allez le voir aussi beaucoup dans les statistiques. Ce que je vais faire d'abord, c'est que je vais nettoyer les statistiques d'attente. Pour cela, je vais utiliser une commande que j'ai mise ici en commentaire qui s'appelle DBCC SQLPERF. Vous reconnaissez DBCC SQLPERF, parce qu'on l'a utilisé avec LOGSPACE pour voir le fichier de journal et le remplissage du fichier de journal. Mais DBCC SQLPERF a deux ou trois autres fonctions, notamment celle-ci. Je vais décommenter et dire : « Prends les statistiques de dm_os_wait_stats et tu fais un CLEAR. » Donc on va les nettoyer. Et immédiatement ensuite, je vais avoir quelque chose de remis à zéro qui va me permettre d'analyser une requête en particulier. J'ai fait une requête un peu compliquée : Contact, CROSS JOIN, Prospect, CROSS JOIN, Prospect encore une fois. Mon but ici, c'est de faire une requête qui n'a absolument aucun sens mais qui sert uniquement à générer une requête un peu volumineuse. Même si mon serveur SQL s'en sort très très bien. Ce que je suis en train de faire : deux CROSS JOIN, ce qui équivaut à faire des produits cartésiens deux fois, donc on fait première table fois le contenu de la deuxième fois le contenu de la troisième. Et puis ensuite quelques clauses de sélection dans la clause WHERE, qui sont un peu compliquées et qui vont nécessiter de scanner la table, enfin, les différentes tables d'ailleurs. Donc, ça peut être un peu long. Je relance mon DBCC SQLPERF pour être sûr que des conditions externes n'ont pas, de nouveau, rajouter des attentes. Je lance ma requête. Voyez que ça a attendu un tout petit peu, mais SQL Server s'en sort quand même très bien. Et puis, je vais regarder les waits qui existent ici. J'ai en plus de ce que j'avais auparavant, un type d'attente qui s'appelle SOS_SCHEDULER_YIELD. Alors c'est pas très compliqué à comprendre d'ailleurs. SOS, ça signifie SQL OS. On en a parlé. Le scheduler, on en a parlé également, il s'agit des ordonnanceurs de tâches. Et yield, ça signifie qu'on a déclenché, qu'on a appelé le scheduler pour lui dire quoi ? Cette requête s'est exécutée relativement lentement. Elle n'a pas eu de problème d'Entrée/Sortie. Les données sont déjà dans le buffer en cache, donc dans la RAM du serveur. Il n'y a pas particulièrement de parallélisme qui a été déclenché, en tout cas je ne le pense pas. Je peux regarder le plan effectivement, parce qu'il n'y a pas vraiment d'opérations ici qui peuvent être parallélisées probablement. Et puis peut-être que la requête n'est pas aussi lente que ça. Ensuite je n'ai pas de verrou, puisque personne d'autre ne s'exécute. Donc je n'ai pas vraiment d'attente. La requête va pouvoir s'exécuter sur un processeur, puisqu'elle n'est pas parallélisée, sans attente. Par contre, ce qui va se passer, c'est qu'elle va atteindre son quantum, qui est normalement de quatre millisecondes. Au bout de quatre millisecondes, le WorkerThread, vous vous souvenez, va dire : « Ben, j'ai atteint mon quantum, j'ai atteint ma limite sur ce processeur. » Donc je vais appeler le scheduler en lui disant : « Écoute, je te rends la main. » Et je vais aller directement dans la file d'attente, vous vous souvenez, runnable. On va reprendre d'ailleurs à ce sujet ce transparent. Vous vous souvenez où on a un Worker, qui, lorsqu'il est en attente, passe en Waiter. Mais ici, il n'est pas en attente. Le Worker dit : « J'ai atteint mon quantum, donc je peux aller directement dans la file Runnable, et ensuite si personne n'est en train d'utiliser le processeur, je peux revenir directement au Processor. Lorsque de Processor, on passe en Runnable, et ensuite on revient, ça génère une attente de type SOS_SCHEDULER_YIELD, qui n'est pas une véritable attente, puisqu'on attend sur rien. Donc, on ne vient jamais dans cette file. Par contre, on passe directement ici et ensuite directement ici. Si vous avez dans vos statistiques en SOS_SCHEDULER_YIELD, quelque chose de plus important que ça, parce que vous voyez, j'ai eu 80 fois ce déclenchement, donc il y a eu 80 fois 4 millisecondes qui se sont écoulées finalement. Et ne termes de temps, c'est rien du tout. Mais si vous commencez à avoir de l'attente, bien, normalement vous devriez avoir de l'attente au niveau du signal. Le signal, c'est le temps pendant lequel on reste dans la file Runnable. Si vous avez cette attente et beaucoup de signal, ça veut dire que les processeurs sont surchargés et qu'ils ne peuvent pas reprendre la requête suffisamment rapidement. Ça peut être un signe de problématique de manque de processeur, de processeur trop lent ou finalement, plus simplement, de requêtes comme celles-ci qui sont trop lentes, qui sont mal-faites et qui font des requêtes trop coûteuses, donc ils doivent déclencher cette opération de yield qui sur-utilise peut-être la machine ou les processeurs. Vous allez voir souvent ce type d'attente, mais ce n'est pas vraiment une attente, c'est plus le signe, en général, qu'il y a des requêtes qui sont consommatrices, longues et que, éventuellement, si vous avez du temps de signal, les processeurs sont saturés, mais ça, bien entendu, vous allez vous en apercevoir également en regardant la courbe du pourcentage d'utilisation des processeurs, bien sûr.

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 !