sys.dm_os_buffer_descriptors(Transact-SQL)

적용 대상:SQL ServerAzure 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(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, S0S1 서비스 목표 및 탄력적 풀의 데이터베이스에는 서버 관리자 계정, 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)