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. Descritores de buffer que identificam exclusivamente cada página de dados armazenada em cache no momento em uma instância do SQL Server. sys.dm_os_buffer_descriptors retorna páginas armazenadas em cache para todos os usuários e bancos de dados 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;