Récupération de base de données accéléréeAccelerated Database Recovery

La récupération de base de données accélérée est une nouvelle fonctionnalité du moteur de base de données SQL qui améliore considérablement la disponibilité des bases de données, en particulier en présence de transactions d’une durée d’exécution longue, grâce à une nouvelle conception du processus de récupération du moteur de base de données SQL.Accelerated Database Recovery (ADR) is a new SQL database engine feature that greatly improves database availability, especially in the presence of long running transactions, by redesigning the SQL database engine recovery process. La récupération de base de données accélérée est disponible pour les bases de données uniques et les bases de données mises en pool dans Azure SQL Database, et les bases de données dans Azure SQL Data Warehouse (actuellement en préversion publique).ADR is currently available for single databases and pooled databases in Azure SQL Database, and databases in Azure SQL Data Warehouse (currently in public preview). Les principaux avantages de la récupération de base de données accélérée sont :The primary benefits of ADR are:

  • Récupération rapide et cohérente des bases de donnéesFast and consistent database recovery

    Avec la récupération de base de données accélérée, les transactions longues n’affectent pas le temps de récupération global, permettant ainsi une rapide et cohérente des bases de données, quelle que soit le nombre ou la taille des transactions actives dans le système.With ADR, long running transactions do not impact the overall recovery time, enabling fast and consistent database recovery irrespective of the number of active transactions in the system or their sizes.

  • Annulation instantanée des transactionsInstantaneous transaction rollback

    Avec la récupération de base de données accélérée, l’annulation des transactions est instantanée, quel que soit le temps pendant lequel une transaction a été active ou le nombre de mises à jour effectuées.With ADR, transaction rollback is instantaneous, irrespective of the time that the transaction has been active or the number of updates that has performed.

  • Troncation agressive du journalAggressive log truncation

    Avec la récupération de base de données accélérée, le journal des transactions est tronqué de façon agressive, même en présence de transactions longues actives, ce qui l’empêche de croître d’une façon hors de contrôle.With ADR, the transaction log is aggressively truncated, even in the presence of active long running transactions, which prevents it from growing out of control.

Le processus actuel de récupération de base de donnéesThe current database recovery process

La récupération de base de données dans SQL Server suit le modèle de récupération ARIES et est constitué de trois phases, qui sont illustrées dans le diagramme suivant et expliquées plus loin de façon plus détaillée.Database recovery in SQL Server follows the ARIES recovery model and consists of three phases, which are illustrated in the following diagram and explained in more detail following the diagram.

processus de récupération actuel

  • Phase d’analyseAnalysis phase

    Analyse vers l’avant du journal des transactions à partir du début du dernier point de contrôle réussi (ou de la page de modifications LSN la plus ancienne) jusqu’à la fin, pour déterminer l’état de chaque transaction au moment de l’arrêt de SQL Server.Forward scan of the transaction log from the beginning of the last successful checkpoint (or the oldest dirty page LSN) until the end, to determine the state of each transaction at the time SQL Server stopped.

  • Phase de restauration par progressionRedo phase

    Analyse vers l’avant du journal des transactions depuis la transaction non validée la plus ancienne jusqu’à la fin, pour rétablir la base de données à l’état où elle était au moment de l’incident en refaisant toutes les opérations validées.Forward scan of the transaction log from the oldest uncommitted transaction until the end, to bring the database to the state it was at the time of the crash by redoing all committed operations.

  • Phase d’annulationUndo phase

    Pour chaque transaction qui était active au moment du plantage, parcourt le journal vers l’arrière, en annulant les opérations effectuées par cette transaction.For each transaction that was active as of the time of the crash, traverses the log backwards, undoing the operations that this transaction performed.

Avec cette conception, le temps nécessaire au moteur de base de données SQL pour récupérer à partir d’un redémarrage inattendu est (à peu près) proportionnel à la taille de la transaction active la plus longue dans le système au moment du plantage.Based on this design, the time it takes the SQL database engine to recover from an unexpected restart is (roughly) proportional to the size of the longest active transaction in the system at the time of the crash. La récupération nécessite une annulation de toutes les transactions incomplètes.Recovery requires a rollback of all incomplete transactions. La quantité de temps nécessaire est proportionnelle au travail que la transaction a effectué et au temps pendant lequel elle a été active.The length of time required is proportional to the work that the transaction has performed and the time it has been active. Par conséquent, le processus de récupération de SQL Server peut prendre beaucoup de temps en présence de transactions longues (comme des grandes opérations d’insertion en bloc ou des opérations de génération d’index sur une grande table).Therefore, the SQL Server recovery process can take a long time in the presence of long running transactions (such as large bulk insert operations or index build operations against a large table).

De plus, annuler/défaire une grande transaction selon cette conception peut également prendre beaucoup de temps, car cela utilise la même phase d’annulation que celle décrite plus haut.Also, cancelling/rolling back a large transaction based on this design can also take a long time as it is using the same Undo recovery phase as described above.

En outre, le moteur de base de données SQL ne peut pas tronquer le journal des transactions quand il y a des transactions longues, car les enregistrements correspondants du journal sont nécessaires pour les processus de récupération et d’annulation.In addition, the SQL database engine cannot truncate the transaction log when there are long running transactions because their corresponding log records are needed for the recovery and rollback processes. Le résultat de cette conception du moteur de base de données SQL est que certains clients sont confrontés à ce problème que la taille du journal des transactions devient très grande et consomme de très grandes quantités d’espace pour le disque.As a result of this design of the SQL database engine, some customers face the problem that the size of the transaction log grows very large and consumes huge amounts of drive space.

Le processus de récupération de base de données accéléréeThe Accelerated Database Recovery process

La récupération de base de données accélérée résout les problèmes évoqués plus haut en redéfinissant complètement le processus de récupération du moteur de base de données SQL pour :ADR addresses the above issues by completely redesigning the SQL database engine recovery process to:

  • La rendre instantanée/avec une durée constante en évitant de devoir analyser le journal à partir de/jusqu’au début de la transaction active la plus ancienne.Make it constant time/instant by avoiding having to scan the log from/to the beginning of the oldest active transaction. Avec la récupération de base de données accélérée, le journal des transactions est traité seulement à partir du dernier point de contrôle réussi (ou du numéro séquentiel dans le journal (LSN) de la page de modifications la plus ancienne).With ADR, the transaction log is only processed from the last successful checkpoint (or oldest dirty page Log Sequence Number (LSN)). Par conséquent, le temps de récupération n’est pas affecté par les transactions longues.As a result, recovery time is not impacted by long running transactions.
  • Réduire au minimum l’espace du journal des transactions, car il n’est plus nécessaire de traiter le journal pour toute la transaction.Minimize the required transaction log space since there is no longer a need to process the log for the whole transaction. Par conséquent, le journal des transactions peut être tronqué de façon agressive au fil de la réalisation des points de contrôle et des sauvegardes.As a result, the transaction log can be truncated aggressively as checkpoints and backups occur.

Globalement, la récupération de base de données accélérée effectue une récupération rapide d’une base de données en gérant des versions de toutes les modifications de la base de données physique et en annulant seulement les opérations logiques, qui sont limitées et peuvent être annulées quasi instantanément.At a High Level, ADR achieves fast database recovery by versioning all physical database modifications and only undoing logical operations, which are limited and can be undone almost instantly. Les transactions qui étaient actives au moment d’un plantage sont marquées comme étant abandonnées et par conséquent, toutes les versions générées par ces transactions peuvent être ignorées par les requêtes utilisateur simultanées.Any transaction that was active as of the time of a crash are marked as aborted and, therefore, any versions generated by these transactions can be ignored by concurrent user queries.

Le processus de récupération de la récupération de base de données accélérée a les trois mêmes phases que le processus de récupération actuel.The ADR recovery process has the same three phases as the current recovery process. Le fonctionnement de ces phases avec la récupération de base de données accélérée est illustré dans le diagramme suivant et expliqué plus en détails après celui-ci.How these phases operate with ADR is illustrated in the following diagram and explained in more detail following the diagram.

Processus de récupération de la récupération de base de données accélérée

  • Phase d’analyseAnalysis phase

    Le processus reste identique à celui d’aujourd’hui, avec en plus la reconstruction du sLog (journal secondaire) et la copie des enregistrements du journal pour les opérations sans gestion de version.The process remains the same as today with the addition of reconstructing sLog and copying log records for non-versioned operations.

  • Phase de restauration par progressionRedo phase

    Divisée en deux phases (P)Broken into two phases (P)

    • Phase 1Phase 1

      Restauration par progression à partir du sLog (de la transaction non validée la plus ancienne jusqu’au dernier point de contrôle).Redo from sLog (oldest uncommitted transaction up to last checkpoint). La restauration par progression est une opération rapide, car elle doit traiter seulement quelques enregistrements provenant du sLog.Redo is a fast operation as it only needs to process a few records from the sLog.

    • Phase 2Phase 2

      La restauration par progression à partir du journal des transactions démarre à partir du dernier point de contrôle (au lieu de la transaction non validée la plus ancienne)Redo from Transaction Log starts from last checkpoint (instead of oldest uncommitted transaction)

  • Phase d’annulationUndo phase

    La phase d’annulation avec la récupération de base de données accélérée se termine quasi instantanément, en utilisant le sLog pour annuler les opérations sans version et le magasin de versions persistantes (PVS, Persisted Version Store) avec le rétablissement logique pour effectuer l’annulation basée sur la version au niveau de la ligne.The Undo phase with ADR completes almost instantaneously by using sLog to undo non-versioned operations and Persisted Version Store (PVS) with Logical Revert to perform row level version-based Undo.

Composants de la récupération de base de données accéléréeADR recovery components

Les quatre composants clés de la récupération de base de données accélérée sont :The four key components of ADR are:

  • Magasin de versions persistantesPersisted Version Store (PVS)

    Le magasin de versions persistantes est un nouveau mécanisme du moteur de base de données SQL pour conserver les versions des lignes générées dans la base de données elle-même, au lieu du magasin de versions tempdb traditionnel.The persisted version store is a new SQL database engine mechanism for persisting the row versions generated in the database itself instead of the traditional tempdb version store. Le magasin de versions persistantes permet l’isolement des ressources et améliore la disponibilité des bases de données secondaires accessibles en lecture.PVS enables resource isolation as well as improves availability of readable secondaries.

  • Rétablissement logiqueLogical Revert

    Le rétablissement logique est le processus asynchrone responsable de l’exécution des annulations basées sur la version au niveau de la ligne, qui permet l’annulation instantanée des transactions et l’annulation des opérations avec version.Logical revert is the asynchronous process responsible for performing row-level version-based Undo - providing instant transaction rollback and undo for all versioned operations.

    • Effectue le suivi des transactions abandonnéesKeeps track of all aborted transactions
    • Effectue l’annulation avec le magasin de versions persistantes pour toutes les transactions utilisateurPerforms rollback using PVS for all user transactions
    • Libère tous les verrous immédiatement après l’abandon de la transactionReleases all locks immediately after transaction abort
  • sLogsLog

    sLog est un flux secondaire de journalisation en mémoire qui stocke des enregistrements du journal pour les opérations sans version (comme l’invalidation du cache de métadonnées, les acquisitions de verrous, etc.).sLog is a secondary in-memory log stream that stores log records for non-versioned operations (such as metadata cache invalidation, lock acquisitions, and so on). Le sLog a les caractéristiques suivantes :The sLog is:

    • Volume faible et en mémoireLow volume and in-memory
    • Stocké sur disque via une sérialisation pendant le processus du point de contrôlePersisted on disk by being serialized during the checkpoint process
    • Tronqué périodiquement au fil de la validation des transactionsPeriodically truncated as transactions commit
    • Accélère la restauration par progression et l’annulation en traitant seulement les opérations sans versionAccelerates redo and undo by processing only the non-versioned operations
    • Permet la troncation agressive du journal des transactions en conservant seulement les enregistrements nécessaires dans le journalEnables aggressive transaction log truncation by preserving only the required log records
  • NettoyeurCleaner

    Le nettoyeur est le processus asynchrone qui se réveille périodiquement et nettoie les versions des pages qui ne sont pas nécessaires.The cleaner is the asynchronous process that wakes up periodically and cleans page versions that are not needed.

Cas d’utilisation de la récupération de base de données accéléréeWho should consider Accelerated Database Recovery

Les types suivants de clients doivent envisager l’utilisation de la récupération de base de données accélérée :The following types of customers should consider enabling ADR:

  • Les clients qui ont des charges de travail avec des transactions longues.Customers that have workloads with long running transactions.
  • Les clients qui ont rencontré des cas où des transactions actives provoquent un accroissement significatif du journal des transactions.Customers that have seen cases where active transactions are causing the transaction log to grow significantly.
  • Les clients ayant subi de longues périodes d’indisponibilité de la base de données en raison de la longueur de la récupération de SQL Server (comme un redémarrage manuel de SQL Server ou l’annulation manuelle de transactions).Customers that have experienced long periods of database unavailability due to SQL Server long running recovery (such as unexpected SQL Server restart or manual transaction rollback).