SQL Server 2016 : Les nouveautés

Découvrir les nouvelles vues de gestion dynamique

Testez gratuitement nos 1324 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Explorez les nouvelles vues de gestion dynamique. Elles permettent d'améliorer les capacités de diagnostic et de débogage des applications et du code SQL.
07:12

Transcription

Voyons maintenant quelques nouveautés en matière de performance. Premièrement il y a quelques vues de gestion dynamique qui ont été ajoutées et qui sont assez pratiques. La première sur le mode des statistiques d'exécution des requêtes, des procédures déjà existantes vous donne des statistiques d'exécution des fonctions. Donc, les fonctions utilisateurs crées en transact SQL. Elles s'appellent sys.dm_exec_function_stats et c'est, donc, une vue. Ici je fais un Cross Apply avec SQL text pour avoir le texte de la définition de la fonction, je le reprends ici. Et l'exemple est très simple, je n'ai pas beaucoup de fonctions ici sur mon système de Demo, mais j'ai 5 fonctions. Je vois leur type. Je peux récupérer le plan, ainsi j'utilise sys.dm_exec_query plan, et puis je vois à quel moment on les a mises dans le cash de plan, quelle est la dernière exécution, le nombre d'exécutions et puis des choses que vous connaissez peut-être si vous utilisez dm_exec_query_stats, le worker time, physical reads, logical writes, logical reads et le temps total passé dans les fonctions. Je trouve cette addition bienvenue parce que les fonctions utilisateurs sont parfois assez consommatrices et peuvent poser des problèmes de performance, notamment quand elles sont malencontreusement utilisées dans des selects, et donc, ça vaut la peine d'avoir une vision de temps en temps à l'aide de cette vue de gestion dynamique sur les performances de vos fonctions pour vous rendre comppte plus facilement des problématiques. Deuxième vue de gestion dynamique très très très pratique dm_exec_input_buffer. Alors, historiquement depuis très très longtemps on peut savoir sur une session particulière à l'aide de la commande DBCC_input_buffer. Quelle est la dernière commande ? Input_buffer. Quelle est la dernière commande qui a été exécutée par une session ? Je vais prendre, par exemple, ici j'ai une session qui est là 142, ça c'est mon speed ou mon session ID. Et je vais, donc, regarder quelle est la dernière requête qui est dans le buffer dans le cash d'exécution, si vous voulez, de cette session. Mais le problème avec ça, c'est qu'une commande DBCC ne peut pas être integrée dans une requête ou alors très difficilement. Je n'ai pas vraiment de manière d'utiliser cet input_buffer élégemment dans une requête. Et enfin, en 2016 cette limitation est levée grâce à cette fonction sys.dm_exec_input_buffer. Je lui envoie un ID de session, je lui envoie un ID de requête si j'en ai besoin, c'est-à-dire qu'une session peut avoir plusieurs request qui ont été lancés dans des requêtes. Et puis il va me donner la même chose que ça, l'EventInfo, le Paramètre et l'EventType comme dans DBCC. Je vous montre ici avec sys.dm_exec_session la liste des sessions, je fais un Cross Apply pour avoir l'input_buffer de chaque session. Je fais attention à ce que la session ID soit plus grande de 50 pour éviter toutes les sessions systèmes qui ne m'intéressent pas. Et puis je fais même : EventInfo is not null. Je veux pas apprendre le résultat d'input_buffer quand il n'y a rien. Et voilà quelque chose de décidément très pratique pour toutes les sessions. Quels sont les derniers événements ? Le dernier événement par session et de quel type d'événement il s'agit ? Voyez qu'il s'agit soit d'un Language Events, soit d'un RPC Event, un appel RPC d'exécution d'une procédure stockée par un appel Remote Procedure Call à partir d'un client. Donc, ceci devrait être un outil supplémentaire très pratique dans vos sessions de diagnostic ou de débogages de vos applications. Une autre addition vraiment, vraiment bienvenue c'est la possibilité de voir les attentes par session. Historiquement depuis SQL server 2005 on a de vues de gestion dynamiques qui nous permettent de vérifier les attentes. Qu'est-ce que c'est qu'une attente ? C'est le moment où le processeur exécute une requête, par exemple, et doit la placer dans une file d'attente, une file qui s'appelle Waiter parce que la requête doit bien attendre sur quelque chose, elle est bloquée par un verrou, par exemple, ou bien par un disque qui est saturé. Et à ce moment-là l'ordonnance hors de tâche interne de SQL server place cette requête en attente pendant un certain temps. Il est donc très pratique de regarder quelles sont les attentes les plus courantes du système pour voir s'il y a un point de blocage qui pourrait être le parallélisme, le nombre de processeur, le disque, que sais-je encore ? Historiquement, donc, on a une vue générale qui s'appelle dm_os_wait_stats qui cumule pour l'integralité de l'instance pour le server toutes les attentes qui se sont produites depuis le démarrage ou depuis qu'on a vidé ces stats. Et donc, j'ai 872 types d'attentes en SQL server 2016, et je vais avoir pour chacun le nombre de fois où on a attendu, je vais vous trouver quelque chose, voilà, qui existe, le temps total en miliseconde, etc. Mais je n'ai pas cette information par session, c'est-à-dire que si j'ai, par exemple, ici une requête que j'ai lancée dans une session je ne peux pas dire à l'aide de cette vue générique quelles sont les attentes qui ont été génériques que pour cette session. Eh bien, grâce à cette nouvelle vue de gestion dynamique SQL server 2016 vous avez la possibilité de le faire. Ça s'appelle dm_exec et non plus dm_os pour SQL_os, ici je suis dans le moteur d'exécution. Dm_exec_session_wait_stats, et donc j'ai les statistiques par session. Mais si je regarde le résultat, j'ai ici le session ID pour dire sur le session ID 51 j'ai eu telle attente, tel nombre d'attente, tel temps d'attente, etc. Ce qui veut donc dire que si je regarde les attentes pour ma session qui est la 142 ici je vais avoir des informations uniquement pour la session. Je vois qu'il y a eu 12 types d'attente, que principalement il y a eu des attentes de type Async_Network_IO, le comportement du client souvent qui récupère les données. Le nombre de fois où on a attendu, le temps total en miliseconde, ça fait approximativement 2 secondes d'attente, ce n'est pas mal. Je vais pouvoir analyser beaucoup plus finement le comportement de mes requêtes ou de mes sessions. Donc, pour les sessions diagnostiques c'est aussi vraiment une addition très itéressante.

SQL Server 2016 : Les nouveautés

Découvrez les nouveautés de SQL Server 2016. Voyez les options de configuration limitées aux bases de données, le chiffrage de données à partir des applications clientes, etc.

2h26 (27 vidéos)
Aucun commentaire n´est disponible actuellement
 

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 !