sys.dm_db_page_info (Transact-SQL)
S’applique à : SQL Server 2019 (15.x)
Azure SQL Database
Azure SQL Managed Instance
Retourne des informations sur une page de la base de données. La fonction retourne une ligne qui contient les informations d’en-tête de la page, notamment les object_id
, index_id
et partition_id
. Cette fonction rend superflue l’utilisation de DBCC PAGE
dans la plupart des cas.
Remarque
sys.dm_db_page_info
est actuellement pris en charge uniquement dans SQL Server 2019 (15.x) et versions ultérieures.
Syntaxe
sys.dm_db_page_info ( DatabaseId , FileId , PageId , Mode )
Arguments
DatabaseId | NULL | DEFAULT
ID de la base de données. DatabaseId est smallint. L’entrée autorisée est l'ID d'une base de données. La valeur par défaut est NULL, mais l’envoi d’une valeur NULL pour ce paramètre entraîne une erreur.
FileId | NULL | DEFAULT
L’ID du fichier. FileId est int. L’entrée valide est le numéro d’identification d’un fichier dans la base de données spécifiée par DatabaseId. La valeur par défaut est NULL, mais l’envoi d’une valeur NULL pour ce paramètre entraîne une erreur.
PageId | NULL | DEFAULT
L’ID de la page. PageId est int. L’entrée valide est le numéro d’identification d’une page dans le fichier spécifié par FileId. La valeur par défaut est NULL, mais l’envoi d’une valeur NULL pour ce paramètre entraîne une erreur.
Mode | NULL | DEFAULT
Détermine le niveau de détail dans la sortie de la fonction. 'LIMITED'
retourne des valeurs NULL pour toutes les colonnes de description, « DETAILED » remplit les colonnes de description. DEFAULT
est 'LIMITED'
.
Table retournée
Nom de la colonne | Type de données | Description |
---|---|---|
database_id | int | ID de la base de données. Dans la base de données Azure SQL, les valeurs sont uniques au sein d’une base de données unique ou d’un pool élastique, mais pas dans un serveur logique. |
file_id | int | ID du fichier |
page_id | int | ID page |
page_header_version | int | Version de l’en-tête de page |
page_type | int | Type de page |
page_type_desc | nvarchar(64) | Description du type de page |
page_type_flag_bits | nvarchar(64) | Type de bits d’indicateur dans l’en-tête de page |
page_type_flag_bits_desc | nvarchar(64) | Description des bits d’indicateur de type dans l’en-tête de page |
page_flag_bits | nvarchar(64) | Indicateurs dans l’en-tête de page |
page_flag_bits_desc | nvarchar (256) | Description des bits d’indicateur dans l’en-tête de page |
page_lsn | nvarchar(64) | Numéro séquentiel dans le journal / horodateur |
page_level | int | Niveau de la page dans l’index (feuille = 0) |
object_id | int | Identificateur de l’objet propriétaire de la page |
index_id | int | Identificateur de l’index (0 pour les pages de données de tas) |
partition_id | bigint | Identificateur de la partition |
alloc_unit_id | bigint | Identificateur de l'unité d'allocation |
is_encrypted | bit | Bit qui indique si la page est chiffrée ou non |
has_checksum | bit | Bit qui indique si la page a ou non une valeur de somme de contrôle |
somme de contrôle | int | Stocke la valeur de somme de contrôle utilisée pour détecter l’altération des données |
is_iam_pg | bit | Bit qui indique si la page est une page IAM ou non |
is_mixed_ext | bit | Bit qui indique si alloué dans une étendue mixte |
has_ghost_records | bit | Bit qui indique si la page contient des enregistrements fantômes Un enregistrement fantôme est un enregistrement marqué pour suppression, mais qui n’a pas encore été supprimé. |
has_version_records | bit | Bit qui indique si la page contient des enregistrements de version utilisés pour la récupération de base de données accélérée |
pfs_page_id | int | Identificateur de page de la page PFS correspondante |
pfs_is_allocated | bit | Bit qui indique si la page est marquée comme allouée dans la page PFS correspondante ou non |
pfs_alloc_percent | int | Pourcentage d’allocation comme indiqué par l’octet PFS correspondant |
pfs_status | nvarchar(64) | Octet PFS |
pfs_status_desc | nvarchar(64) | Description de l’octet PFS |
gam_page_id | int | Identificateur de page de la page GAM correspondante |
gam_status | bit | Bit qui indique si alloué dans GAM |
gam_status_desc | nvarchar(64) | Description du bit de l’état GAM |
sgam_page_id | int | Identificateur de page de la page SGAM correspondante |
sgam_status | bit | Bit qui indique si alloué dans SGAM |
sgam_status_desc | nvarchar(64) | Description du bit de l’état SGAM |
diff_map_page_id | int | Identificateur de page de la page bitmap différentielle correspondante |
diff_status | bit | Bit qui indique si l’état diff est modifié |
diff_status_desc | nvarchar(64) | Description du bit de l’état diff |
ml_map_page_id | int | Identificateur de page de la page bitmap de journalisation minimale correspondante |
ml_status | bit | Bit qui indique si la page est journalisée minimalement |
ml_status_desc | nvarchar(64) | Description du bit d’état de journalisation minimale |
prev_page_file_id | smallint | Identificateur du fichier de page précédent |
prev_page_page_id | int | Identificateur de page de la page précédente |
next_page_file_id | smallint | Identificateur du fichier de page de la page suivant |
next_page_page_id | int | Identificateur de page de la page suivante |
fixed_length | smallint | Longueur des lignes de taille fixe |
slot_count | smallint | Nombre total d’emplacements (utilisés et inutilisés) Pour une page de données, ce nombre équivaut au nombre de lignes. |
ghost_rec_count | smallint | Nombre d’enregistrements marqués comme fantômes sur la page Un enregistrement fantôme est un enregistrement marqué pour suppression, mais qui n’a pas encore été supprimé. |
free_bytes | smallint | Nombre d’octets libres sur la page |
free_data_offset | int | Décalage de l’espace libre à la fin de la zone de données |
reserved_bytes | smallint | Nombre d’octets libres réservés par toutes les transactions (si segment de mémoire) Nombre de lignes fantômes (si nœud terminal d’index) |
reserved_bytes_by_xdes_id | smallint | Espace contribué par m_xdesID à m_reservedCnt Pour des fins de débogage uniquement |
xdes_id | nvarchar(64) | Dernière transaction apportée par m_reserved Pour des fins de débogage uniquement |
Notes
La fonction de gestion dynamique sys.dm_db_page_info
retourne des informations telles que page_id
, file_id
, index_id
, object_id
et ainsi de suite, qui sont présentes dans un en-tête de page. Ces informations sont utiles pour dépanner et déboguer différentes performances (contention de verrous et de verrous) et les problèmes d’altération.
sys.dm_db_page_info
peut être utilisé à la place de l’instruction DBCC PAGE
dans de nombreux cas, mais il retourne uniquement les informations d’en-tête de page, et non le corps de la page. DBCC PAGE
est toujours nécessaire pour les cas d’usage où l’intégralité du contenu de la page est requise.
Utiliser conjointement avec d’autres DMV
L’un des cas d’usage importants de sys.dm_db_page_info
est de le joindre à d’autres DMV qui exposent des informations de page. Pour faciliter ce cas d’usage, une nouvelle colonne appelée page_resource
a été ajoutée qui expose les informations de page dans un format hexadécimal de 8 octets. Cette colonne a été ajoutée à sys.dm_exec_requests
et sys.sysprocesses
et est ajoutée à d’autres DMV à l’avenir si nécessaire.
Une nouvelle fonction, sys.fn_PageResCracker
, prend page_resource
comme entrée et génère une seule ligne qui contient database_id
, file_id
et page_id
. Cette fonction peut ensuite être utilisée pour faciliter les jointures entre sys.dm_exec_requests
ou sys.sysprocesses
et sys.dm_db_page_info
.
autorisations
Requiert l’autorisation VIEW DATABASE STATE
sur la base de données.
Autorisations pour SQL Server 2022 (et versions plus récentes)
Requiert l'autorisation VIEW DATABASE PERFORMANCE STATE sur la base de données.
Exemples
R. Afficher toutes les propriétés d’une page
La requête suivante retourne une ligne avec toutes les informations de page pour une combinaison donnée database_id
, file_id
, page_id
avec le mode par défaut (« LIMITED »)
SELECT *
FROM sys.dm_db_page_info (5, 1, 15, DEFAULT);
B. Utiliser sys.dm_db_page_info avec d’autres DMV
La requête suivante retourne une ligne par wait_resource
exposé par sys.dm_exec_requests
lorsque la ligne contient une valeur page_resource
non-null
SELECT page_info.*
FROM sys.dm_exec_requests AS d
CROSS APPLY sys.fn_PageResCracker(d.page_resource) AS r
CROSS APPLY sys.dm_db_page_info(r.db_id, r.file_id, r.page_id, 'LIMITED') AS page_info;