sys.dm_os_buffer_descriptors (Transact-SQL)
Retourne des informations sur toutes les pages de données qui se trouvent actuellement dans le pool de mémoires tampons de SQL Server. Le résultat de cet affichage peut être utilisé pour déterminer la répartition des pages de base de données dans le pool de mémoires tampons par base de données, objet ou type.
Lorsqu'une page de données est lue à partir du disque, cette page est copiée dans le pool de mémoires tampons de SQL Server et mise en cache en vue de sa réutilisation. Chaque page de données mise en cache est associée à un descripteur de mémoire tampon. Les descripteurs de mémoire tampon identifient de manière unique chaque page de données actuellement mise en cache dans une instance de SQL Server. sys.dm_os_buffer_descriptors retourne les pages mises en cache pour toutes les bases de données utilisateur et système. Cela inclut les pages qui sont associées à la base de données Resource.
Nom de la colonne |
Type de données |
Description |
---|---|---|
database_id |
int |
Identificateur de la base de données associée à la page dans le pool de mémoires tampons. Cette colonne accepte la valeur NULL. |
file_id |
int |
Identificateur du fichier qui contient l'image persistante de la page. Cette colonne accepte la valeur NULL. |
page_id |
int |
Identificateur de la page dans le fichier. Cette colonne accepte la valeur NULL. |
page_level |
int |
Niveau d'index de la page. Cette colonne accepte la valeur NULL. |
allocation_unit_id |
bigint |
Identificateur de l'unité d'allocation de la page. Cette valeur peut être utilisée pour la jointure de sys.allocation_units. Cette colonne accepte la valeur NULL. Remarque sys.dm_os_buffer_descriptors peut afficher des valeurs inexistantes dans allocation_unit_id pour les index cluster créés avec une version de SQL Server antérieure à SQL Server 2005. |
page_type |
nvarchar(60) |
Type de la page, par exemple page de données ou page d'index. Cette colonne accepte la valeur NULL. Pour plus d'informations, consultez Fonctionnement des pages et étendues. |
row_count |
int |
Nombre de lignes dans la page. Cette colonne accepte la valeur NULL. |
free_space_in_bytes |
int |
Quantité d'espace disponible dans la page, en octets. Cette colonne accepte la valeur NULL. |
is_modified |
bit |
1 = la page a été modifiée après avoir été lue sur le disque. Cette colonne accepte la valeur NULL. |
numa_mode |
int |
Nœud NUMA (Nonuniform Memory Access) pour la mémoire tampon. |
Autorisations
Nécessite l'autorisation VIEW SERVER STATE sur le serveur.
Notes
sys.dm_os_buffer_descriptors retourne les pages actuellement utilisées par la base de données Resource. sys.dm_os_buffer_descriptors ne retourne pas d'informations sur les pages libres ou occultées, ni sur les pages qui comprenaient des erreurs lors de leur lecture.
De |
À |
Sur |
Relation |
---|---|---|---|
sys.dm_os_buffer_descriptors |
sys.databases |
database_id |
plusieurs-à-un |
sys.dm_os_buffer_descriptors |
<userdb>.sys.allocation_units |
allocation_unit_id |
plusieurs-à-un |
sys.dm_os_buffer_descriptors |
<userdb>.sys.database_files |
file_id |
plusieurs-à-un |
Exemples
A. Renvoi du nombre de pages mises en cache pour chaque base de données
L'exemple suivant retourne le nombre de pages chargées pour chaque base de données.
SELECT count(*)AS cached_pages_count
,CASE database_id
WHEN 32767 THEN 'ResourceDb'
ELSE db_name(database_id)
END AS Database_name
FROM sys.dm_os_buffer_descriptors
GROUP BY db_name(database_id) ,database_id
ORDER BY cached_pages_count DESC;
B. Renvoi du nombre de pages mises en cache pour chaque objet de la base de données active
L'exemple suivant retourne le nombre de pages chargées pour chaque objet de la base de données active.
SELECT count(*)AS cached_pages_count
,name ,index_id
FROM sys.dm_os_buffer_descriptors AS bd
INNER JOIN
(
SELECT object_name(object_id) AS name
,index_id ,allocation_unit_id
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.hobt_id
AND (au.type = 1 OR au.type = 3)
UNION ALL
SELECT object_name(object_id) AS name
,index_id, allocation_unit_id
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.partition_id
AND au.type = 2
) AS obj
ON bd.allocation_unit_id = obj.allocation_unit_id
WHERE database_id = db_id()
GROUP BY name, index_id
ORDER BY cached_pages_count DESC;