sys.dm_os_buffer_descriptors(Transact-SQL)

적용 대상: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

현재 SQL Server 버퍼 풀에 있는 모든 데이터 페이지에 대한 정보를 반환합니다. 데이터베이스, 개체 또는 유형에 따라 버퍼 풀에서 데이터베이스 페이지를 배포하는 방식을 결정하는 데 이 뷰의 결과를 사용할 수 있습니다. SQL Server 이 동적 관리 뷰는 버퍼 풀 확장 파일의 데이터 페이지에 대한 정보도 반환합니다. 자세한 내용은 버퍼 풀 확장을 참조하세요.

디스크에서 데이터 페이지를 읽으면 페이지가 SQL Server 버퍼 풀에 복사되고 다시 사용할 수 있습니다. 각 캐시된 데이터 페이지에는 하나의 버퍼 설명자가 있습니다. 버퍼 설명자는 현재 SQL Server 인스턴스에 캐시된 각 데이터 페이지를 고유하게 식별합니다. sys.dm_os_buffer_descriptors는 모든 사용자 및 시스템 데이터베이스에 대해 캐시된 페이지를 반환합니다. 여기에는 Resource 데이터베이스와 연결된 페이지가 포함됩니다.

참고

Azure Synapse Analytics 또는 분석 플랫폼 시스템(PDW)에서 이를 호출하려면 이름 sys.dm_pdw_nodes_os_buffer_descriptors 사용합니다. 이 구문은 Azure Synapse Analytics의 서버리스 SQL 풀에서 지원되지 않습니다.

열 이름 데이터 형식 Description
database_id int 버퍼 풀에 있는 페이지와 연결된 데이터베이스의 ID입니다. Null을 허용합니다.
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 버퍼에 대한 Nonuniform Memory Access 노드입니다. Null을 허용합니다.
read_microsec bigint 페이지를 버퍼로 읽어 오는 데 필요한 실제 시간(밀리초)입니다 이 값은 버퍼를 다시 사용하면 다시 설정됩니다. Null을 허용합니다.
is_in_bpool_extension bit 1 = 페이지가 버퍼 풀 확장에 있습니다. Null을 허용합니다.
pdw_node_id int 적용 대상: Azure Synapse Analytics, 분석 플랫폼 시스템(PDW)

이 배포가 있는 노드의 식별자입니다.

사용 권한

SQL Server 및 SQL Managed Instance에서는 VIEW SERVER STATE 권한이 필요합니다.

SQL Database Basic, S0S1 서비스 목표 또는 탄력적 풀 내의 데이터베이스에 대해서는 서버 관리자 계정, Azure Active Directory 관리자 계정 또는 ##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)