Compartir a través de


sys.dm_os_buffer_descriptors (Transact-SQL)

Devuelve información acerca de todas las páginas de datos que están actualmente en el grupo de búferes de SQL Server. La salida de esta vista se puede utilizar para determinar la distribución de páginas de la base de datos en el grupo de búferes según la base de datos, el objeto o el tipo.

Cuando se lee una página de datos del disco, ésta se copia en el grupo de búferes de SQL Server y se almacena en caché para volver a utilizarla. Cada página de datos almacenada en caché tiene un descriptor de búfer. Los descriptores de búfer identifican de forma única cada página de datos que está actualmente en caché en una instancia de SQL Server. sys.dm_os_buffer_descriptors devuelve las páginas en caché de todas las bases de datos del sistema y de usuario. Esto incluye las páginas que están asociadas a la base de datos Resource.

Nombre de la columna

Tipo de datos

Descripción

database_id

int

Identificador de la base de datos asociada con la página en el grupo de búferes. Acepta valores NULL.

file_id

int

Identificador del archivo que almacena la imagen permanente de la página. Acepta valores NULL.

page_id

int

Identificador de la página en el archivo. Acepta valores NULL.

page_level

int

Nivel de índice de la página. Acepta valores NULL.

allocation_unit_id

bigint

Identificador de la unidad de asignación de la página. Este valor se puede utilizar para combinar sys.allocation_units. Acepta valores NULL.

Nota   sys.dm_os_buffer_descriptors puede mostrar valores inexistentes en allocation_unit_id para los índices clúster creados en versiones de SQL Server anteriores a SQL Server 2005.

page_type

nvarchar(60)

Tipo de la página, como: página de datos o página de índice. Acepta valores NULL. Para obtener más información, vea Descripción de páginas y extensiones.

row_count

int

Número de filas de la página. Acepta valores NULL.

free_space_in_bytes

int

Cantidad, en bytes, de espacio disponible en la página. Acepta valores NULL.

is_modified

bit

1 = La página se ha modificado después de leerse del disco. Acepta valores NULL.

numa_mode

int

Nodo de acceso no uniforme a memoria para el búfer.

Permisos

Requiere el permiso VIEW SERVER STATE en el servidor.

Notas

sys.dm_os_buffer_descriptors devuelve páginas que utiliza la base de datos Resource. sys.dm_os_buffer_descriptors no devuelve información sobre páginas descartadas ni disponibles, ni sobre páginas con errores durante su lectura.

De

A

En

Relación

sys.dm_os_buffer_descriptors

sys.databases

database_id

varios a uno

sys.dm_os_buffer_descriptors

<userdb>.sys.allocation_units

allocation_unit_id

varios a uno

sys.dm_os_buffer_descriptors

<userdb>.sys.database_files

file_id

varios a uno

Ejemplos

A. Devolver el recuento de páginas almacenadas en caché de cada base de datos

En el ejemplo siguiente se devuelve el recuento de páginas cargadas para cada base de datos.

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. Devolver el recuento de páginas almacenadas en caché para cada objeto de la base de datos actual

En el ejemplo siguiente se devuelve el recuento de páginas cargadas para cada objeto en la base de datos actual.

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;