Compartilhar via


sys.dm_os_buffer_descriptors (Transact-SQL)

Retorna informações sobre todas as páginas de dados atualmente no pool de buffer do SQL Server. A saída dessa exibição pode ser usada para determinar a distribuição de páginas de bancos de dados no pool de buffer de acordo com o banco de dados, objeto ou tipo.

Quando uma página de dados é lida a partir do disco, a página é copiada para o pool de buffer do SQL Server e armazenada em cache para reutilização. Cada página de dados tem um descritor de buffer. Os descritores de buffer identificam com exclusividade cada página de dados atualmente armazenada em cache em uma instância do SQL Server. sys.dm_os_buffer_descriptors retorna páginas armazenadas em cache de todos os bancos de dados de usuário e do sistema. Isso inclui páginas que estão associadas ao banco de dados de Recursos.

Nome da coluna

Tipo de dados

Descrição

database_id

int

Identificação de banco de dados associada à página no pool de buffer. Permite valor nulo.

file_id

int

Identificação do arquivo que armazena a imagem persistida da página. Permite valor nulo.

page_id

int

Identificação da página no arquivo. Permite valor nulo.

page_level

int

Nível de índice da página. Permite valor nulo.

allocation_unit_id

bigint

Identificação da unidade de alocação da página. Esse valor pode ser usado para unir sys.allocation_units. Permite valor nulo.

Observação   Os sys.dm_os_buffer_descriptors podem mostrar valores inexistentes em índices allocation_unit_id para índices clusterizados criados em versões do SQL Server anteriores ao SQL Server 2005.

page_type

nvarchar(60)

Tipo da página, como: página de Dados ou página de Índice. Permite valor nulo. Para obter mais informações, consulte Compreendendo páginas e extensões.

row_count

int

Número de linhas na página. Permite valor nulo.

free_space_in_bytes

int

Quantidade de espaço livre disponível, em bytes, na página. Permite valor nulo.

is_modified

bit

1 = A página foi modificada depois de lida a partir do disco. Permite valor nulo.

numa_mode

int

Nó de acesso à memória não uniforme do buffer.

Permissões

Requer a permissão VIEW SERVER STATE no servidor.

Comentários

sys.dm_os_buffer_descriptors retorna páginas que estão sendo usadas pelo banco de dados de Recursos. sys.dm_os_buffer_descriptors não retorna informações sobre páginas livres ou roubadas, ou sobre páginas que apresentaram erros quando foram lidas.

De

Para

Em

Relação

sys.dm_os_buffer_descriptors

sys.databases

database_id

muitos para um

sys.dm_os_buffer_descriptors

<userdb>.sys.allocation_units

allocation_unit_id

muitos para um

sys.dm_os_buffer_descriptors

<userdb>.sys.database_files

file_id

muitos para um

Exemplos

A. Retorno de contagem de páginas armazenadas em cache para cada banco de dados

O exemplo a seguir retorna a contagem de páginas carregadas em cada banco de dados.

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. Retorno de contagem de páginas para cada objeto no banco de dados atual

O exemplo a seguir retorna a contagem de páginas carregada em cada objeto no banco de dados atual.

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;