Implémentation de la compression de page

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Cet article résume la façon dont le moteur de base de données implémente la compression de page. Elle fournit des informations de base qui vous aideront à planifier l'espace de stockage dont vous avez besoin pour vos données.

La compression de page est identique pour les tables, les partitions de table, les index et les partitions d'index. La compression de page qui est décrite ci-dessous pour une table peut s'appliquer de la même manière à tous les autres types d'objets. Dans les exemples qui suivent, les chaînes de caractères sont compressées, mais la compression de préfixe et la compression de dictionnaire appliquent les mêmes principes aux autres types de données.

La compression du niveau feuille des tables et des index avec la compression de page regroupe trois opérations réalisées dans l'ordre suivant :

  1. Compression de ligne
  2. Compression de préfixe
  3. Compression de dictionnaire

Quand vous utilisez la compression de page, les pages qui ne sont pas au niveau feuille sont compressées en utilisant uniquement la compression de ligne. Pour plus d’informations sur la compression de lignes, consultez implémentation de la compression de ligne.

Compression de préfixe

Pour chaque page compressée, la compression de préfixe utilise les étapes suivantes :

  1. Pour chaque colonne, une valeur est identifiée qui peut être utilisée pour réduire l'espace de stockage des valeurs dans chaque colonne.

  2. Une ligne qui représente les valeurs de préfixe de chaque colonne est créée et stockée dans la structure des informations de compression qui suit immédiatement l'en-tête de page.

  3. Les valeurs de préfixe répétées dans la colonne sont remplacées par une référence au préfixe correspondant. Si la valeur d’une ligne ne correspond pas exactement à la valeur de préfixe sélectionnée, une correspondance partielle peut toujours être indiquée.

L'illustration suivante montre un exemple de page d'une table avant la compression de préfixe.

Diagram of page before prefix compression.

L'illustration suivante montre la même page après compression de préfixe. Le préfixe est déplacé vers l'en-tête et les valeurs des colonnes sont remplacées par des références au préfixe.

Diagram of page after prefix compression.

Dans la première colonne de la première ligne, la valeur 4b indique que les quatre premiers caractères du préfixe (aaab) sont présents pour cette ligne, ainsi que le caractère b. Cela rend la valeur aaabbrésultante, qui est la valeur d’origine.

Compression de dictionnaire

Une fois la compression de préfixe terminée, la compression de dictionnaire est appliquée. La compression de dictionnaire recherche les valeurs répétées n'importe où dans la page et les stocke dans la zone des informations de compression. Contrairement à la compression de préfixe, la compression du dictionnaire n’est pas limitée à une colonne. La compression de dictionnaire peut remplacer des valeurs répétées qui apparaissent n'importe où sur une page. L'illustration suivante montre la même page après compression de dictionnaire.

Diagram of page after dictionary compression.

La valeur 4b a été référencée à partir de différentes colonnes de la page.

Lorsque la compression de page se produit

Lorsqu'une table est créée avec compression de page, aucune compression ne se produit. Toutefois, les métadonnées de la table indiquent que la compression de page doit être utilisée. Lorsque des données sont ajoutées à la première page de données, une compression de ligne est appliquée aux données. Étant donné que la page n’est pas complète, aucun avantage n’est obtenu à partir de la compression de page. Lorsque la page est pleine, la ligne suivante à ajouter lance l'opération de compression de page. La page entière est examinée ; chaque colonne est évaluée pour la compression de préfixe, puis, toutes les colonnes sont évaluées pour la compression de dictionnaire. Si la compression de page a créé suffisamment de place sur la page pour une ligne supplémentaire, la ligne est ajoutée et les données sont compressées à la fois par ligne et compressées par page. Si l’espace gagné par la compression de page moins l’espace requis pour la structure CI n’est pas significatif, la compression de page n’est pas utilisée pour cette page. Les lignes futures s’adaptent à la nouvelle page ou, si elles ne correspondent pas, une nouvelle page est ajoutée au tableau. Comme pour la première page, la nouvelle page n’est pas compressée dans la première page.

Lorsqu'une table existante contenant des données est convertie en compression de page, chaque page est reconstruite et évaluée. La reconstruction de toutes les pages provoque la reconstruction de la table, de l'index ou de la partition.

Étapes suivantes