Plusieurs questions sur SGAM & GAM & IAM & PFS dans SQL Server

8

Vous avez plusieurs questions sur la structure interne de SQL Server.

Supposons que nous ayons une table dans une base de données.

  1. Les pages SGAM et GAM gardent une trace des étendues partagées et uniformes dans un seul intervalle GAM (~ 4 Go), et nous aident à trouver le type d'étendue approprié lors de l'allocation des pages / extensions (initialement, les 8 premières pages sont allouées à partir d'extensions mixtes et les positions de ces pages sont l'enregistreur vers les pages IAM, puis les extensions GAM (étendues uniformes) et ces informations sont stockées dans la page IAM enchaînée suivante).

    Disons que les pages du tableau ont été allouées et que la taille du tableau est supérieure à 8 pages, et un peu plus tard, les lignes ont été supprimées, laissant un espace réutilisable. Comment SQL Server sait que les étendues ont de l'espace libre?

    Les pages contiennent des informations sur la taille de l'espace libre, mais il faut trop de temps pour vérifier chaque page. Les bits dans les pages SGAM et GAM ne nous disent rien à côté de l'extension qui est allouée ou a des pages gratuites (la page entière est gratuite, pas partiellement).

  2. L'en-tête de fichier et les pages SGAM et GAM et IAM sont parmi les premières pages d'un fichier. Quelle structure de données pointe réellement vers eux?

newprint
la source

Réponses:

11

Comment SQL Server sait que les étendues ont de l'espace libre?

SQL Server effectue le suivi de l'espace libre sur la page, dans les tables de segment de mémoire ainsi que dans les pages LOB utilisant la page PSF en interne.

En outre, vous pouvez utiliser sys.dm_db_file_space_usageDMV pour le savoir total_page_count, allocated_extent_page_countainsi que unallocated_extent_page_countdans une base de données.

Les pages d'espace libre de page (PFS) enregistrent l'état d'allocation de chaque page, si une page individuelle a été allouée et la quantité d'espace libre sur chaque page. Le PFS a un octet pour chaque page, enregistrant si la page est allouée et si oui, si elle est vide, 1 à 50% pleine, 51 à 80% pleine, 81 à 95% pleine ou 96 à 100% pleine.

Une page PFS est la première page après la page d'en-tête de fichier dans un fichier de données (page numéro 1). Elle est suivie d'une page GAM (page numéro 2), puis d'une page SGAM (page 3). Il existe une page PFS d'environ 8 000 pages après la première page PFS. Il existe une autre page GAM à 64 000 extensions après la première page GAM à la page 2 et une autre page SGAM à 64 000 extensions après la première page SGAM à la page 3. L'illustration suivante montre la séquence de pages utilisées par le moteur de base de données pour allouer et gérer les extensions.

Cliquez ici pour agrandir - sortie en utilisant DBCC PAGE

entrez la description de l'image ici

Voir: À l'intérieur du moteur de stockage: GAM, SGAM, PFS et autres cartes d'allocation

L'en-tête de fichier et les pages SGAM et GAM et IAM sont parmi les premières pages d'un fichier. Quelle structure de données pointe réellement vers eux?

Je ne comprends pas cette question. La plus petite unité de stockage est une page. Huit pages 8K forment une étendue. Voici ce que comprend une page de données :

entrez la description de l'image ici

Je recommande fortement de lire le blog SQLSkills.com dans lequel Paul et son équipe bloguent beaucoup sur les composants internes de SQL Server .

Kin Shah
la source