Le 14 septembre 2017, nous avons publié une version actualisée de notre Politique de confidentialité. En utilisant video2brain.com vous vous engagez à respecter ces documents mis à jour. Veuillez donc prendre quelques minutes pour les consulter.

SQL Server 2016 pour les administrateurs IT

Appréhender le journal de transactions

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Le journal de transactions contient un historique de toutes les modifications de données. Découvrez en quoi il est essentiel au bon fonctionnement de SQL Server.
06:55

Transcription

Donc, j'ai fait une modification dans la table Contact.Contact sous forme d'Update, et puis j'ai des pages dans le Buffer qui sont modifiées. Que se passe-t-il ? En fait, lorsque j'ai lu ma table le moteur de stockage a posé des pages en mémoire, dans le Buffer. Lorsque j'ai fait la modification les pages qui ont été modifiées sont celles qui sont dans le Buffer, en mémoire et non pas les pages qui sont sur le disque, dans le fichier de données. Pourquoi ? Voyez qu'il y a 420 pages approximativement à modifier pour cet Update. Vous vous imaginez que ces 420 pages sont bien allouées dans le fichier de données à des endroits spécifiques. Les numéros de pages, voyez ici un « page_id » par rapport au « file_id ». Ces numéros de pages correspondent à des positions dans le fichier. Donc, par exemple à la position 798 il y a une page, à la position 1181 il y a une autre page. Ça voudrait dire que si je devais écrire directement sur le fichier de données, il faudrait que le disque aille chaque fois chercher la bonne page, c'est ce qu'on appelle une écriture aléatoire. C'est assez mal nommé mais en fait ça veut dire que le disque doit aller chercher au bon endroit pour écrire à cet endroit. Une écriture aléatoire ça veut dire qu'il faut un temps de recherche sur le disque. Ça peut être par exemple 10 millisecondes et vous imaginez que 420 fois 10 millisecondes en terme de temps d'écriture c'est catastrophique. Donc, on ne va jamais écrire de façon aléatoire sur le disque. On ne va pas toucher le disque lorsqu'on va faire cet update. Puisque les pages sont montées en mémoire on va pouvoir les modifier directement en ram et c'est très rapide. Mais il y a deux problèmes avec cette approche. Le premier c'est que si le serveur crash à ce moment-là, j'ai perdu mes modifications, n'est-ce pas ? Et deuxième problème ça veut dire que si j'écris un temps réel sur le fichier de données. Si ma modification qui ici fait une modification sur un ensemble de lignes elle s'interromp au milieu ou elle rate pour une raison quelconque, par exemple une violation contrainte pour la table, je ne peux pas revenir en arrière. J'ai déjà écrit un certain nombre de choses. Il faut pourtant que je gère ici un contexte transactionnel. La transaction doit être atomique : elle doit s'exécuter complètement ou s'annuler complètement. Donc, comment est-ce que je vais faire pour m'assurer que cette modification puisse aller jusqu'à son terme ou bien être complètement annulée ? Il ne faut pas que j'écrive directemet les données. Il faut que je maintienne cette information dans un journal. C'est le journal de transaction. Ce journal va servir à deux choses : écrire ces informations quand même sur le disque pour éviter qu'un crash les fasse disparaître, et deux : assurer un contexte transactionnel qui puisse relire les modifications pour les annuler. Je vais vous montrer à l'aide d'une commande non documentée, d'une fonction en l'occurence. Donc, je vais faire un « select » sur une fonction qui va retourner une table. Cette fonction s'appelle « fn souligné dblog ». Je vais lui passer deux paramètres « null » et « null ». Ces deux paramètres sont des identifiants de séquence de log. Comme je ne les connais pas je vais mettre « null, null » pour avoir tout le journal de transaction et voici le contenu de mon journal. Ça continue à tourner, à peu près 100000 lignes dans le journal. Et ce journal stocke de façon séquentielle tous les événements d'écriture sur ma base de données. C'est un journal, donc, c'est séquentiel. On ajoute toujours à la fin. Et comme on ajoute toujours à la fin, ça veut dire que les écritures ne sont plus aléatoires sur le disque mais elles sont séquentielles. C'est beaucoup plus rapide. Il me suffit simplement d'ouvrir le fichier et d'écrire les informations les unes après les autres et je n'ai plus de temps de recherche du disque. C'est la seule méthode d'écriture rapide. C'est la seule méthode, en fait, raisonnable pour écrire des données sans perdre du temps. Ok, donc, j'écris dans le journal. En plus, dans ce journal j'ai indiqué un début de transaction, vous le voyez ici « LOP_BEGIN_XACT » et puis à la fin je vais avoir un « COMMIT_XACT », je ne sais pas si c'est exactement le même. Ici j'ai un ID de transaction, mais tout ce que j'ai fait entre les deux est transactionnel et si jamais il y a une violation de contrainte, admettons que ça se passe par exemple ici, voilà, le journal de transaction peut revenir en arrière, lire tout ce qui a été fait et le défaire de façon à revenir à la situation antérieure. Donc, je monte beaucoup mais il suffit d'aller tout au début, revenir à la situation antérieure qui est ici pour défaire tout ce qui a été fait. Donc, le journal de transaction est un mécanisme absolument indispensable pour toutes les écritures de données. Je vais le vider. Pour ça je m'assure d'être dans un mode, je vous expliquerai plus tard. Ici simple, très bien. Ça devrait suffire d'ailleurs, je vais regarder. Alors, j'ai 65 lignes, vous voyez. Ce n'est pas mal, je vais encore m'assurer avec un « Checkpoint ». Je reviendrai sur le concept que je ne peux pas faire mieux. Je peux faire mieux, voilà, mon journal de transaction est vide. Donc, ça veut dire que le fichier sur le disque a toujours la même taille mais par contre son contenu maintenant est pratiquement nul. Le fichier est totalement libre et on peut écrire des nouvelles choses dedans. Je refais une modification. Un Update en mettant tout en minuscule pour qu'il y ait vraiment quelque chose à modifier. Je vais regarder ici combien j'ai de pages qui sont modifiées, il n'y en a aucune. Donc, il s'est passé quelque chose, je vais vous expliquer. Ensuite sur le Checkpoint, ça c'est important. Et je fais ma modification. J'ai maintenant 416 pages qui ont été modifiées en mémoire, mais pas sur le fichier de données. Et j'ai un certain nombre d'informations qui ont été stockées dans le journal de transaction, vous voyez. On a ici « commencer notre transaction ». On a fait quand même 100000 écritures dans le journal, ce n'est pas mal, et on a terminé ici. Pourquoi 100000 écritures alors qu'on a modifié, je ne sais plus mais un peu moins ? C'est parce que chaque modification peut entrainer plusieurs écritures. On peut modifier la ligne, on peut faire une supression, une insertion quand on fait un Update. Et puis ici j'ai modifié une colonne qui est indexée. Donc, on reparlera aussi au passage des index, mais modifier une colonne qui est indexée ça veut dire qu'on va devoir maintenir également un index, et donc ça va être journalisé également. Donc, voilà pour le comportement du journal de transaction. Ça veut dire qu'il est absolument indispensable, on ne peut pas s'en passer. Parce que si on désactive le journal de transaction, ce qui n'est pas totalement possible, on va dire il y a une petite subtilité maintenant dans SQL serveur, mais disons que ce n'est pas possible. Si on pouvait le désactiver ça veut dire qu'on n'aurait aucune garantie que cette écriture réellement faite. Je fais un Update, on me dit OK, mais en fait, ce n'est pas sur le disque, le serveur crash et j'ai perdu mes modifications. Grâce à mon journal de transaction c'est bien sur le disque et je n'ai pas perdu mes modifications.

SQL Server 2016 pour les administrateurs IT

Comprenez le fonctionnement et les différents modules qui composent SQL Server. Prenez en main les bases de données, les schémas, les tables, la gestion des fichiers, etc.

5h20 (55 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :14 mars 2017

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 !