SQL Server 2016 : Diagnostic

Découvrir l'allocation du fichier de données

Testez gratuitement nos 1302 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
En détaillant les fichiers de données, vous verrez comment est effectuée l'allocation sous forme de pages.
07:56

Transcription

Nous sommes ici dans une formation de diagnostic n'est-ce pas ? Donc on va commencer directement à utiliser SQL Server avec ses outils de diagnostic, c'est à dire des requêtes, des vues dynamiques de gestion, des vues système, des outils comme DBCC, pour voir ce qui se passe réellement dans SQL Server. Alors premier exemple, on parlait de l'allocation dans un fichier de données, je vais vous montrer ce qu'il en est. J'ai ici ma base de données d'exemple qui s'appelle PachaDataFormation, et cette base de donnés comporte des tables bien entendu qui représentent un centre de formation avec des cours, des sessions de cours, des participants qui sont inscrits etc. Mais ça ne va pas nous toucher beaucoup parce qu'on va voir plutôt l'allocation des différentes tables. Donc d'abord je m'assure d'être dans PachaDataFormation, ensuite je vais créer une table temporaire comme vous le voyez ici, qui va contenir le résultat d'une commande DBCC que voilà, qui s'appelle DBCC IND. Il s'agit d'une commande qui est non-documentée, donc c'est une commande un peu cachée mais que vous trouvez facilement en cherchant sur Google par exemple. Les commandes DBCC, ça veut dire Data Base Control Commands, commandes de contrôle de base de données, sont des commandes administratives qui permettent d'effectuer des actions ou d'obtenir des informations et qui existent depuis très longtemps dans SQL Server. Cette commande DBCC IND permet d'interroger le moteur de stockage pour dire par rapport à un index, donc IND, quelle est son allocation ? Ici je vais prendre une table qui s'appelle Contact.Contact que je vous montre ici, et qui est simplement une table de contact, je peux vous montrer le contenu d'ailleurs. Donc comme vous voyez ce sont des gens. Je viens de vous dire IND pour un index et puis maintenant je vous dis, je regarde une table. Vous allez me dire, mais ma table n'est pas un index. Et bien si. En interne, SQL Server considère qu'une table est un index, et son ID notamment ici est 0. L'identifiant de l'index sur cette table c'est 0, et l'index 0 sur la table, c'est la table elle même. Donc on peut interroger une table comme on interrogerait un index, notamment avec cette commande DBCC. Si je lance la commande DBCC comme ceci elle va ma retourner un résultat sous forme de table, mais ce que je fais ici, ce que je reprends ce résultat pour le mettre dans la table temporaire. Et comme les commandes DBCC sont relativement archaïques, et bien elles ne permettent pas de le faire nativement. Donc ce que je suis obligé de faire, c'est ici une insertion dans ma table temporaire à partir de l'exécution de cette commande dynamiquement dans un EXEC de SQL dynamique, une chaîne. Donc je vais déjà exécuter ça: Création de la table temporaire et alimentation par la commande DBCC. Ensuite on va regarder à l'intérieur, alors voilà le résultat de la commande DBCC, je vous mets ça en grand. Voici quelques infos, j'ai donc l'allocation faite par le moteur de stockage sur cette table, je vois que j'ai ici 285 lignes, donc cela veut dire qu'il y a 285 pages. Cette tables est contenue dans 285 pages de 8 Ko. Je vais avoir les identifiants de page qui sont ici, par exemple je sais que sur la ligne une, la page 17-17, donc 1717 du fichier 1, vous voyez ici, j'ai PageFID pour FileID, l'identifiant du fichier. PagePID pour PageID, l'identifiant de la page. Ça me donne l'adresse dans cette base de données. Il pourrait y avoir plusieurs fichiers, donc j'ai un identifiant de fichier, et puis à l'intérieur d'un fichier, et bien j'ai la page 0, 1, 2, 3 et la page 1717, elle touche Contact. Je vais avoir un type de page ici, et je vois que c'est un type 10. Je vous ai indiqué ici, dans ces petits commentaires quel type de page correspond à quoi. Vous voyez que 10 c'est ce qu'on appelle une page d'IAM. IAM ça veut dire Index Allocation Map, table d'allocation de l'index. Très bien, ça dit ce que ça veut dire. Finalement cette page, la 1717, c'est la page d'allocation pour cette table elle-même. Puisque c'est une page d'allocation d'un index et que la table est considérée comme un index, c'est une page qui va permettre d'identifier toutes les allocations pour la table Contact. Donc cette page d'IAM va indiquer au moteur de stockage que les pages de la table Contact sont 1712, 1713 , 1714 etc. Vous voyez d'ailleurs on en a ici 8, c'est donc une extension. Dans cette extension il y a 8 pages pour cette table. Vous voyez ensuite que les pages suivantes sont des pages de type 1, c'est à dire page de données. Et on a référencé leur page d'IAM ici. On a dit quelle est la page d'IAM qui référence la page 1712. Et bien c'est la page 1717. Donc finalement cette page est la page d'IAM de toutes les autres. C'est elle qui va référencer ces pages. Et ensuite, on voit que nous avons beaucoup de pages de données, on n'a plus que ça d'ailleurs, et on sait donc que chaque page de données va contenir une partie de la table. On peut aller jeter un coup d’œil d'ailleurs. Prenons la page simplement 1712. Je vais activer à l'aide d'une commande DBBC un drapeau de trace qui est le 3604. Donc ça c'est un peu une cuisine interne, si j'active ce drapeau de trace ça va me permettre d'utiliser une commande DBCC non-documentée également qui s'appelle DBCC PAGE. Et comme son nom l'indique, DBCC PAGE va nous donner le contenu d'une page. J'avais déjà préparé mon coup, vous voyez que je veux voir le contenu de la page 1717. On se souvient que c'est la page d'IAM. On va effectivement jeter un petit coup d’œil, et vous voyez que c'est vraiment de la cuisine interne en plus du moteur de stockage. Mais, l'IAM nous donne ici quelques informations sur les pages qui sont allouées ou pas allouées pour ma table. Voilà, c'était juste pour vous montrer. On pourrait voir des pages système comme par exemple la page numéro 1 du fichier qui s'appelle un GAM, pour Global Allocation Map, une page d'allocation qui va dire dans quelle page vont se retrouver les IAM des autres tables. On peut aussi utiliser à partir de SQL Server 2012, une vue qui s'appelle sys.dm_db_database_page_allocations, et qui est une version moderne des commandes DBCC que je suis en train de taper. Je vous le mets ici pour référence. Alors ce que je voulais faire, c'est prendre la page 1712 je crois, On y retourne, 1712 effectivement, pour voir ce qu'il y a à l'intérieur. Je peux modifier ceci, et puis voilà le contenu de la page 1712. Et vous voyez qu'il y a des informations ici avec probablement deux numéros de téléphone, ou un numéro de téléphone, un email, et puis je vais avoir une autre information du même genre, encore une autre information. Ça va être les lignes de ma table, vous voyez j'ai prénom, email, téléphone, téléphone, télécopie, sexe etc. Voici le contenu finalement de mes données vues d'un point de vue du moteur de stockage.

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 !