sys.dm_os_buffer_descriptors(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
현재 SQL Server 버퍼 풀에 있는 모든 데이터 페이지에 대한 정보를 반환합니다. 이 뷰의 출력을 사용하여 데이터베이스, 개체 또는 형식에 따라 버퍼 풀의 데이터베이스 페이지 분포를 확인할 수 있습니다. SQL Server에서 이 동적 관리 뷰는 버퍼 풀 확장 파일의 데이터 페이지에 대한 정보도 반환합니다. 자세한 내용은 버퍼 풀 확장을 참조 하세요.
디스크에서 데이터 페이지를 읽으면 페이지가 SQL Server 버퍼 풀에 복사되고 재사용을 위해 캐시됩니다. 캐시된 각 데이터 페이지에는 하나의 버퍼 설명자가 있습니다. 버퍼 설명자는 현재 SQL Server 인스턴스에 캐시된 각 데이터 페이지를 고유하게 식별합니다. sys.dm_os_buffer_descriptors 모든 사용자 및 시스템 데이터베이스에 대해 캐시된 페이지를 반환합니다. 여기에는 Resource 데이터베이스와 연결된 페이지가 포함됩니다.
참고 항목
Azure Synapse Analytics 또는 PDW(Analytics Platform System)에서 이를 호출하려면 이름 sys.dm_pdw_nodes_os_buffer_descriptors 사용합니다. 이 구문은 Azure Synapse Analytics의 서버리스 SQL 풀에서 지원되지 않습니다.
열 이름 | 데이터 형식 | 설명 |
---|---|---|
database_id | int | 버퍼 풀에 있는 페이지와 연결된 데이터베이스의 ID입니다. Null을 허용합니다. Azure SQL Database에서 값은 단일 데이터베이스 또는 탄력적 풀 내에서 고유하지만 논리 서버 내에는 고유하지 않습니다. |
file_id | int | 페이지의 지속형 이미지를 저장하는 파일의 ID입니다. Null을 허용합니다. |
page_id | int | 파일 내 페이지의 ID입니다. Null을 허용합니다. |
page_level | int | 페이지의 인덱스 수준입니다. Null을 허용합니다. |
allocation_unit_id | bigint | 페이지 할당 단위의 ID입니다. 이 값은 sys.allocation_units 조인하는 데 사용할 수 있습니다. Null을 허용합니다. |
page_type | nvarchar(60) | 페이지 유형(예: 데이터 페이지 또는 인덱스 페이지)입니다. Null을 허용합니다. |
row_count | int | 페이지의 행 수입니다. Null을 허용합니다. |
free_space_in_bytes | int | 페이지의 사용 가능한 공간(바이트)입니다. Null을 허용합니다. |
is_modified | bit | 1 = 디스크에서 읽은 후 페이지가 수정되었습니다. Null을 허용합니다. |
numa_node | int | 버퍼에 대한 비유형 메모리 액세스 노드입니다. Null을 허용합니다. |
read_microsec | bigint | 페이지를 버퍼로 읽어 오는 데 필요한 실제 시간(밀리초)입니다 이 값은 버퍼를 다시 사용하면 다시 설정됩니다. Null을 허용합니다. |
is_in_bpool_extension | bit | 1 = 페이지가 버퍼 풀 확장에 있습니다. Null을 허용합니다. |
pdw_node_id | int | 적용 대상: Azure Synapse Analytics, Analytics Platform System(PDW) 이 배포가 있는 노드의 식별자입니다. |
사용 권한
SQL Server 및 SQL Managed Instance에서는 VIEW SERVER STATE
권한이 필요합니다.
SQL Database Basic, S0 및 S1 서비스 목표 또는 탄력적 풀 내의 데이터베이스에 대해서는 서버 관리자 계정, Microsoft Entra 관리자 계정 또는 ##MS_ServerStateReader##
서버 역할의 멤버 자격이 필요합니다. 다른 모든 SQL Database 서비스 목표에 대해서는 데이터베이스에 대한 VIEW DATABASE STATE
권한 또는 ##MS_ServerStateReader##
서버 역할의 멤버 자격이 필요합니다.
SQL Server 2022 이상에 대한 사용 권한
서버에 대한 VIEW SERVER PERFORMANCE STATE 권한이 필요합니다.
설명
sys.dm_os_buffer_descriptors 리소스 데이터베이스에서 사용 중인 페이지를 반환합니다. sys.dm_os_buffer_descriptors 무료 또는 도난당한 페이지 또는 읽을 때 오류가 발생한 페이지에 대한 정보를 반환하지 않습니다.
보낸 사람 | 수행할 작업 | 설정 | 관계 |
---|---|---|---|
sys.dm_os_buffer_descriptors | sys.databases | database_id | 다 대 일 |
sys.dm_os_buffer_descriptors | <userdb>.sys.allocation_units | allocation_unit_id | 다 대 일 |
sys.dm_os_buffer_descriptors | <userdb>.sys.database_files | file_id | 다 대 일 |
sys.dm_os_buffer_descriptors | sys.dm_os_buffer_pool_extension_configuration | file_id | 다 대 일 |
예제
A. 각 데이터베이스에 대해 캐시된 페이지 수 반환
다음 예제에서는 각 데이터베이스에 대해 로드된 페이지 수를 반환합니다.
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. 현재 데이터베이스의 각 개체에 대해 캐시된 페이지 수 반환
다음 예제에서는 현재 데이터베이스의 각 개체에 대해 로드된 페이지 수를 반환합니다.
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;
참고 항목
sys.allocation_units(Transact-SQL)
SQL Server 운영 체제 관련 동적 관리 뷰(Transact-SQL)
Resource 데이터베이스
sys.dm_os_buffer_pool_extension_configuration(Transact-SQL)