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. Autorise 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 joindre sys.allocation_units. Autorise la valeur NULL.

Remarque   sys.dm_os_buffer_descriptors peut afficher des valeurs inexistantes dans allocation_unit_id pour les index clusters créés dans les versions de SQL Server antérieures à SQL Server 2005.

page_type

nvarchar(60)

Type de la page, par exemple page de données ou page d'index. Autorise la valeur NULL.

row_count

int

Nombre de lignes dans la page. Autorise la valeur NULL.

free_space_in_bytes

int

Quantité d'espace disponible dans la page, en octets. Autorise 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_node

int

Nœud NUMA (Nonuniform Memory Access) pour la mémoire tampon. Cette colonne accepte la valeur NULL.

read_microsec

bigint

Temps réel (en microsecondes) requis pour lire la page dans la mémoire tampon. Ce nombre est réinitialisé lorsque la mémoire tampon est réutilisée. Cette colonne accepte la valeur NULL.

Autorisations

Nécessite l'autorisation VIEW SERVER STATE sur le serveur.

Notes

sys.dm_os_buffer_descriptors retourne les pages utilisées par la base de données Resource. sys.dm_os_buffer_descriptors ne retourne pas d'informations à propos de pages libres ou détournées, ou à propos de pages qui contenaient des erreurs au moment de leur lecture.

De

Vers

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.Retour 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;

Voir aussi

Référence

sys.allocation_units (Transact-SQL)

Fonctions et vues de gestion dynamique (Transact-SQL)

Vues de gestion dynamique SQL Server liées au système d'exploitation (Transact-SQL)

Concepts

Base de données Resource