Condividi tramite


sys.dm_os_buffer_descriptors (Transact-SQL)

Restituisce informazioni relative a tutte le pagine di dati incluse nel pool di buffer di SQL Server. L'output di questa vista può essere utilizzato per determinare la distribuzione delle pagine del database nel pool di buffer in base al database, all'oggetto o al tipo. In SQL Server 2014 questa DMV restituisce inoltre informazioni sulle pagine di dati nel file di estensione del pool di buffer. Per ulteriori informazioni, vedere Estensione pool di buffer.

Quando una pagina di dati viene letta dal disco, viene copiata nel pool di buffer di SQL Server e memorizzata nella cache per il riutilizzo. Ogni pagina di dati memorizzata nella cache è associata a un descrittore di buffer. I descrittori di buffer identificano in modo univoco ogni pagina di dati attualmente memorizzata nella cache in un'istanza di SQL Server. sys.dm_os_buffer_descriptors restituisce le pagine memorizzate nella cache per tutti i database utente e di sistema. Sono incluse le pagine associate al database Resource.

Si applica a: SQL Server (da SQL Server 2008 a versione corrente).

Nome della colonna

Tipo di dati

Descrizione

database_id

int

ID del database associato alla pagina nel pool di buffer. Ammette i valori Null.

file_id

int

ID del file in cui è archiviata l'immagine persistente della pagina. Ammette i valori Null.

page_id

int

ID della pagina all'interno del file. Ammette i valori Null.

page_level

int

Livello di indice della pagina. Ammette i valori Null.

allocation_unit_id

bigint

ID dell'unità di allocazione della pagina. Questo valore può essere utilizzato per creare un join di sys.allocation_units. Ammette i valori Null.

page_type

nvarchar(60)

Tipo di pagina, ad esempio pagina di dati o pagina di indice. Ammette i valori Null.

row_count

int

Numero di righe nella pagina. Ammette i valori Null.

free_space_in_bytes

int

Quantità di spazio disponibile, in byte, nella pagina. Ammette i valori Null.

is_modified

bit

1 = La pagina è stata modificata dopo essere stata letta dal disco. Ammette i valori Null.

numa_node

int

Nodo NUMA (non-uniform memory access) per il buffer. Ammette i valori Null.

read_microsec

bigint

Tempo effettivo (in microsecondi) necessario per leggere la pagina nel buffer. Questo numero viene reimpostato quando si riutilizza il buffer. Ammette i valori Null.

Autorizzazioni

È richiesta l'autorizzazione VIEW SERVER STATE per il server.

Osservazioni

sys.dm_os_buffer_descriptors restituisce le pagine utilizzate dal database Resource. sys.dm_os_buffer_descriptors non restituisce invece informazioni sulle pagine libere o prelevate, né sulle pagine in cui siano stati rilevati errori in fase di lettura.

Da

A

In

Relazione

sys.dm_os_buffer_descriptors

sys.databases

database_id

molti-a-uno

sys.dm_os_buffer_descriptors

<userdb>.sys.allocation_units

allocation_unit_id

molti-a-uno

sys.dm_os_buffer_descriptors

<userdb>.sys.database_files

file_id

molti-a-uno

sys.dm_os_buffer_descriptors

sys.dm_os_buffer_pool_extension_configuration

file_id

molti-a-uno

Esempi

A.Restituzione del conteggio delle pagine memorizzate nella cache per ogni database

Nell'esempio seguente viene restituito il conteggio delle pagine caricate per ogni database.

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.Restituzione del conteggio delle pagine memorizzate nella cache per ogni oggetto nel database corrente

Nell'esempio seguente viene restituito il conteggio delle pagine caricate per ogni oggetto nel database corrente.

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;

Vedere anche

Riferimento

sys.allocation_units (Transact-SQL)

Funzioni e viste a gestione dinamica (Transact-SQL)

Viste a gestione dinamica relative al sistema operativo di SQL Server (Transact-SQL)

sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)

Concetti

Database Resource