sys.dm_os_buffer_descriptors (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)
Retorna informações sobre todas as páginas de dados que estão atualmente no pool de buffers 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. No SQL Server, essa exibição de gerenciamento dinâmico também retorna informações sobre as páginas de dados no arquivo de extensão do pool de buffers. Para obter mais informações, consulte Extensão do Buffer Pool.
Quando uma página de dados é lida do disco, a página é copiada para o pool de buffers 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 exclusivamente cada página de dados que está atualmente armazenada em cache 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.
Observação
Para chamar isso do Azure Synapse Analytics ou do PDW (Analytics Platform System), use o nome sys.dm_pdw_nodes_os_buffer_descriptors. Não há suporte a essa sintaxe para o pool de SQL sem servidor no Azure Synapse Analytics.
Nome da coluna | Tipo de dados | Descrição |
---|---|---|
database_id | int | Identificação do banco de dados associada à página no pool de buffer. Permite valor nulo. No Banco de Dados SQL do Azure, os valores são exclusivos em um único banco de dados ou em um pool elástico, mas não em um servidor lógico. |
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 | ID da unidade de alocação da página. Esse valor pode ser usado para unir sys.allocation_units. Permite valor nulo. |
page_type | nvarchar(60) | Tipo da página, como: página de Dados ou página de Índice. Permite valor nulo. |
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 no disco. Permite valor nulo. |
numa_node | int | Nó de acesso à memória não uniforme do buffer. Permite valor nulo. |
read_microsec | bigint | A hora real (em microssegundos) necessária para ler a página no buffer. Este número é redefinido quando o buffer é reutilizado. Permite valor nulo. |
is_in_bpool_extension | bit | 1 = A página está na extensão do buffer pool. Permite valor nulo. |
pdw_node_id | int | Aplica-se a: Azure Synapse Analytics, Analytics Platform System (PDW) O identificador do nó em que essa distribuição está ativada. |
Permissões
No SQL Server e na Instância Gerenciada de SQL, requer a permissão VIEW SERVER STATE
.
Nos objetivos de serviço do Banco de Dados SQL Básico, S0 e S1 e para bancos de dados em pools elásticos, é necessário ter a conta do administrador do servidor, a conta do administrador do Microsoft Entra ou a associação à ##MS_ServerStateReader##
função de servidor. Em todos os outros objetivos de serviço do Banco de Dados SQL, a permissão VIEW DATABASE STATE
no banco de dados ou a associação à função de servidor ##MS_ServerStateReader##
são necessárias.
Permissões do SQL Server 2022 e posteriores
É necessária a permissão VIEW SERVER PERFORMANCE 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 gratuitas ou roubadas, ou sobre páginas que tinham erros quando foram lidas.
De | Para | Ativado | 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.arquivos_de_banco de dados | file_id | muitos para um |
sys.dm_os_buffer_descriptors | sys.dm_os_buffer_pool_extension_configuration | file_id | muitos para um |
Exemplos
R. Retornando a 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;
Confira também
sys.allocation_units (Transact-SQL)
Exibições de gerenciamento dinâmico relacionadas ao sistema operacional do SQL Server (Transact-SQL)
Banco de dados de recursos
sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)