[SQL Server] Sauvegarde : comment SQL Server prend en compte les nouvelles modifications transactionnelles dans une sauvegarde complète en cours d’exécution ?

Ce billet se charge d’expliquer comment, durant une sauvegarde complète, SQL Server fait en sorte que les modifications transactionnelles soient incluses dans ladite sauvegarde. Cela concerne également les sauvegardes différentielles.

Avant de commencer…

Afin de comprendre le fonctionnement d’un journal de transactions, vous pouvez jeter un coup d’oeil ici.

Entrée dans le vif du sujet

Au moment du lancement de la sauvegarde complète d’une base de données, SQL Server exécute d’abord une opération de checkpoint (ou point de contrôle)
afin de forcer l’écriture de toutes les pages « sales » (dirty pages) en cache sur le disque, puis commence à lire les pages allouées de la base de données. Les pages « sales » sont, pour rappel, des pages dont les modifications transactionnelles en mémoire n’ont pas été écrites sur le disque.

Durant le processus de sauvegarde complète d’une base de données, SQL Server, après avoir lu toutes les pages de données allouées, analyse le journal des transactions (en partant du LSN de départ ou MinLSN) de sorte qu’en cas de restauration ultérieure, les modifications ayant eu lieu durant l’opération de sauvegarde complète soient prises en compte.

La phase de lecture des pages allouées permet, à SQL Server, d’avoir un snapshot de la base de données. Et le fait de lire le journal des transactions lui permet d’avoir une base de données transactionnellement consistante et prenant en compte tous les changements ayant eu lieu durant le processus de sauvegarde complète en rejouant les transactions concernées (REDO) ou en annulant celles non-validées (UNDO). Le LSN (Log Sequence Number, pour rappel) de départ pris en compte par SQL Server est le MinLSN de la sauvegarde complète, en l’occurrence : le dernier checkpoint (donc, au moment du lancement de la sauvegarde complète), le début de la transaction active la plus ancienne (qui peut aussi être celle en cours d’exécution au moment du lancement du checkpoint de la sauvegarde complète) ou la dernière transaction répliquée.

Afin de mieux comprendre les explications ci-dessus, voici un schéma simple (on suppose que T1, T2 et T3 sont 3 transactions, et qu’au moment du lancement de la sauvegarde complète, il n’y a aucune transaction active):


Grosso-modo :

  1. La sauvegarde complète débute par un checkpoint, ce qui marque le début de la chaîne LSN du journal des transactions.
  2. SQL Server débute la lecture des pages de données allouées.
  3. SQL Server lit la page X.
  4. Une transaction T1 débute et modifie la page Y.
  5. Une transaction T2 débute et modifie la page X.
  6. T1 se termine, ce qui marque la validation (commit) des changements opérés sur la page Y.
  7. SQL Server lit la page Y.
  8. T2 se termine : validation des changements opérés sur la page X. La page X, bien que changée et donc obsolète dans le processus de lecture de SQL Server, ne sera pas relue, mais sa modification prise en compte durant la phase d’analyse du journal des transactions.
  9. Une transaction T3 débute.
  10. SQL Server termine sa lecture des pages de données allouées. T3 se terminant après la fin de la lecture des pages allouées, elle deviendra donc la plus ancienne transaction active, et donc le début du LSN actif du journal des transactions.
  11. Démarrage de l’analyse du journal des transactions par SQL Server en partant du MinLSN relatif à la sauvegarde complète (LSN du dernier checkpoint de la sauvegarde complète, LSN du début de T3). En effet, si SQL Server ne prenait en compte que le MinLSN de la plus ancienne transaction active, c’est-à-dire T3, les modifications relatives aux pages X et Y seraient ignorées (car réalisées avant le début de T3), d’où également la prise en compte du LSN du dernier checkpoint.
  12. T3 se termine.
  13. Fin de l’analyse du journal des transactions par SQL Server avec application des changements.
  14. Fin de la sauvegarde complète. Emballez, c’est pesé.

Références

    

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s