Gestion des allocations des extensions et de l'espace libre

Les structures de données SQL Server qui gèrent les allocations des extensions et l'espace libre ont une structure relativement simple. Elles présentent les avantages suivants :

  • Les informations sur l'espace libre sont très compactes, d'où un nombre de pages d'informations relativement faible.

    La vitesse s'en trouve augmentée grâce à la réduction du nombre de lectures sur le disque nécessaires à la récupération des informations d'allocation et à l'augmentation de la possibilité de garder en mémoire l'affectation des pages, ce qui réduit encore le nombre de lectures.

  • La plupart des informations d'allocation ne sont pas enchaînées les unes aux autres, ce qui simplifie leur gestion.

    Chaque allocation ou désallocation de page peut être effectuée rapidement, ce qui diminue les problèmes de conflit entre les tâches simultanées nécessitant une allocation ou une désallocation de pages.

Gestion des allocations des extensions

SQL Server utilise deux types de tables d'allocation pour enregistrer l'allocation des extensions :

  • Pages GAM (Global Allocation Map)

    Les pages GAM enregistrent les extensions qui ont été allouées. Chaque table GAM prend en charge 64 000 extensions, soit près de 4 Go de données. Elle est constituée d'un bit pour chaque extension dans l'intervalle couvert. Si la valeur du bit est 1, l'extension est libre. En revanche, si sa valeur est 0, l'extension est allouée.

  • Pages SGAM (Shared Global Allocation Map)

    Les pages SGAM enregistrent les extensions actuellement utilisées comme extensions mixtes et possédant au moins une page inutilisée. Chaque table GAM prend en charge 64 000 extensions, soit près de 4 Go de données. Elle est constituée d'un bit pour chaque étendue dans l'intervalle couvert. Si la valeur du bit est 1, l'extension est utilisée comme extension mixte et possède une page libre. Si la valeur du bit est 0, l'extension n'est pas utilisée comme extension mixte ou correspond à une extension mixte dont toutes les pages sont utilisées.

Chaque extension possède les schémas de bits suivants dans les tables GAM et SGAM, en fonction de son utilisation actuelle.

Utilisation actuelle de l'extension

Valeur du bit GAM

Valeur du bit SGAM

Libre, inutilisée

1

0

Extension uniforme ou extension mixte complète

0

0

Extension mixte avec pages libres

0

1

Ceci se traduit par des algorithmes simples de gestion des extensions. Pour allouer une extension uniforme, le Moteur de base de données recherche un bit 1 dans la table GAM et lui affecte la valeur 0. Pour trouver une extension mixte comportant des pages libres, le Moteur de base de données recherche un bit 1 dans la table SGAM. Pour allouer une extension mixte, le Moteur de base de données recherche un bit 1 dans la table GAM, lui affecte la valeur 0 et affecte la valeur 1 au bit correspondant dans la table SGAM. Pour désallouer une extension, le Moteur de base de données s'assure que le bit de la table GAM a la valeur 1 et que le bit de la table SGAM a la valeur 0. Les algorithmes internes effectivement utilisés par le Moteur de base de données sont plus complexes que ceux dont il est fait mention ici (le Moteur de base de données répartit, en effet, les données uniformément dans une base de données), mais ont été cependant simplifiés afin de ne plus devoir gérer les chaînes d'informations d'allocation des extensions.

Suivi de l'espace libre

Les pages PFS (Page Free Space) enregistrent quand une page individuelle a été allouée, le statut d'allocation et la quantité d'espace libre de chaque page. Chaque page correspond à un octet qui enregistre si la page a été allouée et, le cas échéant, si elle est vide, pleine à 1-50 %, 51-80 %, 81-95 % ou 96-100 %.

Une fois une extension allouée à un objet, le Moteur de base de données utilise les pages PFS pour enregistrer les pages de l'extension qui sont allouées ou libres. Ces informations sont alors utilisées par le Moteur de base de données pour l'allocation de toute nouvelle page. La quantité d'espace libre d'une page n'est conservée que pour les pages de segment, de texte et d'image. Ces informations sont exploitées par le Moteur de base de données pour rechercher une page disposant de suffisamment d'espace libre pour accueillir une nouvelle ligne. Pour les index, le suivi de l'espace libre des pages n'est pas nécessaire étant donné que le point d'insertion d'une nouvelle ligne est défini par les valeurs de clés de l'index.

Une page PFS vient juste après la page d'en-tête d'un fichier de données (page 1). Elle est suivie d'une page GAM (page 2), puis d'une page SGAM (page 3). Il y a une page PFS approximativement 8 000 pages après la première page PFS. Il y a une autre page GAM 64 000 extensions après la première page GAM (page 2) et une autre page SGAM 64 000 extensions après la première page SGAM (page 3). L'illustration suivante indique l'ordre des pages utilisées par le Moteur de base de données pour l'allocation et la gestion des extensions.

Pages utilisées pour allouer et gérer des étendues