Points de contrôle et partie active du journal

Les points de contrôle vident les pages de données incorrectes de la mémoire cache de la base de données active sur le disque, ce qui réduit la partie active du journal devant être traitée durant une récupération complète d'une base de données. Au cours d'une récupération complète, les types d'actions suivants sont effectués :

  • Les enregistrements de journal concernant des modifications qui n'ont pas été vidées sur le disque avant l'arrêt du système sont restaurés par progression.

  • Toutes les modifications associées à des transactions incomplètes (telles que les transactions pour lesquelles il n'existe pas d'enregistrement de journal COMMIT ou ROLLBACK) sont restaurées.

Opération de point de contrôle

Un point de contrôle effectue les processus suivants dans la base de données :

  • Écrit un enregistrement dans le fichier journal qui marque le début du point de contrôle.

  • Stocke les informations enregistrées pour le point de contrôle dans une chaîne d'enregistrements de journal des points de contrôle.

    L'une des informations consignées dans le point de contrôle est le numéro séquentiel dans le journal du premier enregistrement de journal qui doit être présent pour permettre une restauration à l'échelle de la base de données. Ce NSE porte le nom de NSE de récupération minimum (NSEmin). Le NSEmin est le minimum de :

    • NSE du début du point de contrôle ;

    • NSE du début de la transaction active la plus ancienne ;

    • NSE du début de la transaction de réplication la plus ancienne qui n'a pas encore été transmise à la base de données de distribution.

    Les enregistrements de point de contrôle contiennent également une liste de toutes les transactions actives qui ont modifié la base de données.

  • Si la base de données utilise le mode de récupération simple, signalez pour une utilisation ultérieure l'espace qui précède le NSEmin.

  • Écrit sur le disque toutes les pages de journal et de données incorrectes.

  • Écrit un enregistrement marquant la fin du point de contrôle dans le fichier journal.

  • Écrit le numéro LSN du début de cette chaîne dans la page de démarrage de la base de données.

Activités entraînant un point de contrôle

Des points de contrôle interviennent dans les situations suivantes :

  • Une instruction CHECKPOINT est exécutée explicitement. Un point de contrôle intervient dans la base de données active pour la connexion.

  • Une opération journalisée minimale est effectuée dans la base de données ; par exemple, une opération de copie en bloc est réalisée sur une base de données qui se sert du mode de récupération utilisant les journaux de transactions.

  • Des fichiers de base de données ont été ajoutés ou supprimés à l'aide de l'instruction ALTER DATABASE.

  • Une instance de SQL Server est arrêtée par une instruction SHUTDOWN ou via l'arrêt du service SQL Server (MSSQLSERVER). Ces opérations provoquent la création d'un point de contrôle dans chaque base de données dans l'instance de SQL Server.

  • Une instance de SQL Server génère régulièrement des points de contrôle automatiques dans chaque base de données, afin de réduire la durée nécessaire à l'instance pour récupérer la base de données.

  • Une sauvegarde de la base de données est effectuée.

  • Une activité nécessitant l'arrêt de la base de données est effectuée. Par exemple, la valeur ON est attribuée à AUTO_CLOSE et la dernière connexion utilisateur à la base de données est fermée, ou une modification d'une option de base de données nécessitant un redémarrage de la base de données est effectuée.

Points de contrôle automatiques

Le Moteur de base de données SQL Server génère des points de contrôle automatiques. L'intervalle entre les points de contrôle automatiques est basé sur la quantité d'espace de journal utilisée et la durée écoulée depuis le dernier point de contrôle. Cet intervalle entre les points de contrôle automatiques peut varier fortement et être long si les modifications apportées à la base de données sont peu nombreuses. Inversement, les points de contrôle automatiques peuvent être fréquents si les données modifiées sont nombreuses.

Utilisez l'option de configuration de serveur intervalle de récupération pour calculer l'intervalle pour toutes les bases de données sur une instance de serveur. Cette option spécifie la durée maximale que le Moteur de base de données doit utiliser pour récupérer une base de données durant un redémarrage du système. Le Moteur de base de données estime le nombre d'enregistrements de journal qu'il peut traiter au cours de l'intervalle de récupération durant une opération de récupération.

L'intervalle entre les points de contrôle automatiques dépend également du mode de récupération :

  • Si la base de données utilise le mode de restauration complète ou le mode de récupération utilisant les journaux de transactions, un point de contrôle automatique est généré chaque fois que le nombre d'enregistrements du journal atteint une valeur que le Moteur de base de données estime pouvoir traiter pendant la durée spécifiée dans l'option intervalle de récupération.

  • Si la base de données utilise le mode de récupération simple, un point de contrôle automatique est généré chaque fois que le nombre des enregistrements de journal atteint la plus faible de ces deux valeurs :

    • Le journal est saturé à 70 %.

    • Le nombre d'enregistrements de journal atteint le nombre que le Moteur de base de données estime pouvoir traiter au cours de la durée spécifiée dans l'option intervalle de récupération.

Pour plus d'informations sur la définition de l'intervalle de récupération, consultez Procédure : définir l'intervalle de récupération (SQL Server Management Studio).

ConseilConseil

L'option de configuration avancée SQL Server -k permet à un administrateur de base de données de limiter le comportement d'E/S de point de contrôle en fonction des performances du sous-système d'E/S pour certains types de points de contrôle. L'option de configuration -k s'applique aux points de contrôle automatiques et aux points de contrôle non limités.

Les points de contrôle automatiques tronquent la section inutilisée du journal des transactions si la base de données utilise le mode de récupération simple. Cependant, ils ne tronquent pas le journal si la base de données utilise le mode de récupération complète ou le mode de récupération utilisant les journaux de transactions. Pour plus d'informations, consultez Troncation du journal des transactions.

L'instruction CHECKPOINT fournit désormais un argument checkpoint_duration facultatif qui spécifie la durée demandée, en secondes, permettant aux points de contrôle de terminer leurs tâches. Pour plus d'informations, consultez CHECKPOINT (Transact-SQL).

Journal actif

La section du fichier journal comprise entre le MinLSN et le dernier enregistrement de journal écrit s'appelle la partie active du journal, ou journal actif. Cette section est indispensable pour procéder à une récupération complète de la base de données. Aucune partie de ce journal actif ne peut être tronquée. Tous les enregistrements de journal doivent être tronqués à partir des parties du journal situées avant le MinLSN.

L'illustration ci-dessous présente une version simplifiée de la fin d'un journal de transactions comportant deux transactions actives. Les enregistrements du point de contrôle ont été compactés en un enregistrement unique.

fin d'un journal des transactions avec des transactions actives

LSN 148 est le dernier enregistrement du journal des transactions. Au moment où le point de contrôle enregistré au numéro LSN 147 était traité, Tran 1 avait été validée et Tran 2 était la seule transaction active. Ainsi, le premier enregistrement de Tran 2 est l'enregistrement de journal le plus ancien pour une transaction active au moment du dernier point de contrôle. Par ailleurs, le numéro LSN 142 est l'enregistrement du début de la transaction pour Tran 2, la valeur MinLSN.

Transactions de longue durée

Le journal actif doit contenir chaque partie de toutes les transactions non validées. Une application qui démarre une transaction et qui ne la valide pas ou ne la restaure pas empêche le Moteur de base de données de faire progresser le MinLSN. Ceci peut provoquer deux types de problèmes :

  • Si le système est arrêté après que la transaction a effectué de nombreuses modifications non validées, la phase de récupération lors du démarrage ultérieur peut être beaucoup plus longue que la durée spécifiée dans l'option intervalle de récupération.

  • Le journal peut devenir très volumineux parce qu'il ne peut pas être tronqué au-delà du MinLSN. Cela se produit même si la base de données utilise le modèle de récupération simple, dans lequel le journal des transactions est généralement tronqué sur chaque point de contrôle automatique.

Transactions de réplication

L'Agent de lecture du journal surveille le journal des transactions de chaque base de données configurée pour la réplication transactionnelle et copie les transactions devant être répliquées à partir du journal des transactions dans la base de données de distribution. Le journal actif doit contenir toutes les transactions qui sont marquées pour la réplication mais qui n'ont pas encore été transmises à la base de données de distribution. Si ces transactions ne sont pas répliquées à temps, elles peuvent empêcher la troncature du journal. Pour plus d'informations, consultez Fonctionnement de la réplication transactionnelle.