Partager via


Gestion de l'espace utilisé par les objets

Une page IAM (Index Allocation Map) mappe les étendues d'une portion de 4 gigaoctets (Go) d'un fichier de base de données utilisées par une unité d'allocation. Une unité d'allocation peut être de trois types :

  • IN_ROW_DATA

    Contient une partition d'un segment ou d'un index.

  • LOB_DATA

    Contient des types de données LOB, tels que xml, varbinary(max) et varchar(max).

  • ROW_OVERFLOW_DATA

    Contient des données de longueur variable stockées dans des colonnes varchar, nvarchar, varbinary ou sql_variant qui dépassent le seuil de 8 060 octets par ligne.

Chaque partition d'un segment ou d'un index contient au moins une unité d'allocation IN_ROW_DATA. Elle peut aussi contenir une unité d'allocation LOB_DATA ou ROW_OVERFLOW_DATA, selon le schéma de segment ou d'index. Pour plus d'informations sur les unités d'allocation, consultez Organisation des tables et des index.

Une page IAM couvre une plage de 4 Go dans un fichier, comme une page GAM ou SGAM. Si l'unité d'allocation contient des étendues provenant de plusieurs fichiers, ou plusieurs plages de 4 Go dans un fichier, il y aura plusieurs pages IAM liées entre elles dans une chaîne IAM. Ainsi, chaque unité d'allocation contient au moins une page IAM pour chaque fichier dans lequel elle possède des étendues. Un fichier peut aussi contenir plusieurs pages IAM si la plage d'étendues du fichier allouée à l'unité d'allocation dépasse la plage que peut enregistrer une page IAM unique.

Pages IAM (Index Allocation Map) gérant des étendues

Les pages IAM sont allouées au fur et à mesure des besoins pour chaque unité d'allocation et elles sont placées aléatoirement dans le fichier. La vue système, sys.system_internals_allocation_units, pointe sur la première page IAM d'une unité d'allocation. Toutes les pages IAM de cette unité d'allocation sont liées entre elles et forment une chaîne.

Important

La vue système sys.system_internals_allocation_units est destinée exclusivement à un usage interne et elle est susceptible de changer. La compatibilité n'est pas garantie.

Pages IAM liées dans une chaîne par unité d'allocation

Une page IAM possède un en-tête indiquant l'étendue de départ de la plage d'étendues mappée par la page IAM. La page IAM contient aussi une grande image dans laquelle chaque bit représente une étendue. Le premier bit représente la première étendue de la plage, le second la deuxième étendue, et ainsi de suite. Si un bit est égal à 0, l'étendue qu'il représente n'est pas allouée à l'unité d'allocation possédant la page IAM. Si un bit est égal à 1, l'étendue qu'il représente est allouée à l'unité d'allocation possédant la page IAM.

Lorsque le moteur de base de données SQL Server a besoin d'insérer une nouvelle ligne et qu'il n'y a pas de place sur la page active, il a recours aux pages IAM et PFS pour rechercher une page à allouer ou, pour un segment ou une page de texte/image, une page suffisamment grande pour accueillir la ligne. Le moteur de base de données utilise les pages IAM pour rechercher les étendues allouées à l'unité d'allocation. Pour chaque étendue, le moteur de base de données recherche les pages PFS afin de vérifier si l'une d'elles peut être utilisée. Chaque page IAM et PFS couvre de nombreuses pages de données de sorte qu'il y a peu de pages IAM et PFS dans une base de données. C'est pourquoi elles se trouvent en général dans la mémoire du pool de mémoires tampons de SQL Server, d'où il est possible de les rechercher plus rapidement. Pour les index, le point d'insertion d'une nouvelle ligne est défini par la clé d'index. Dans ce cas, la recherche précédemment décrite ne se produit pas.

Le moteur de base de données n'alloue une nouvelle étendue à une unité d'allocation que s'il ne trouve pas rapidement une page suffisamment grande dans une étendue existante pour accueillir la ligne à insérer. Le moteur de base de données alloue des étendues à partir de celles qui sont disponibles dans le groupe de fichiers à l'aide d'un algorithme d'allocation proportionnel. Si un groupe de fichiers comprend deux fichiers, l'un d'entre eux disposant de deux fois plus d'espace disponible que l'autre, deux pages seront allouées à partir du fichier ayant le plus d'espace disponible pour chacune des pages allouées à partir de l'autre fichier. Cela signifie que chaque fichier d'un groupe doit avoir un pourcentage identique d'espace utilisé.