分享方式:


sys.dm_os_buffer_descriptors (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)

傳回目前在 SQL Server 緩衝池中所有數據頁的相關信息。 此檢視的輸出可用來根據資料庫、物件或類型來判斷緩衝池中資料庫頁面的分佈。 在 SQL Server 中,此動態管理檢視也會傳回緩衝池擴充檔案中數據頁的相關信息。 如需詳細資訊,請參閱 緩衝池延伸模組

從磁碟讀取數據頁時,頁面會複製到 SQL Server 緩衝池,並快取以供重複使用。 每個快取的數據頁都有一個緩衝區描述元。 緩衝區描述元會唯一識別目前在 SQL Server 實例中快取的每個數據頁面。 sys.dm_os_buffer_descriptors會傳回所有用戶和系統資料庫的快取頁面。 這包括與資源資料庫相關聯的頁面。

注意

若要從 Azure Synapse Analytics 或 Analytics Platform System (PDW) 呼叫此專案,請使用名稱 sys.dm_pdw_nodes_os_buffer_descriptors。 Azure Synapse Analytics 的無伺服器 SQL 集區不支援此語法。

資料行名稱 資料類型 描述
database_id int 與緩衝池中頁面相關聯的資料庫標識碼。 可為 Null。

在 Azure SQL 資料庫中,這些值在單一資料庫或彈性集區內是唯一的,但在邏輯伺服器內則不是唯一的。
file_id int 儲存頁面保存影像的檔案識別碼。 可為 Null。
page_id int 檔案內頁面的標識碼。 可為 Null。
page_level int 頁面的索引層級。 可為 Null。
allocation_unit_id bigint 頁面配置單位的標識碼。 這個值可用來聯結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 受控執行個體上,需要 VIEW SERVER STATE 權限。

在 SQL 資料庫 基本、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會傳回 Resource 資料庫所使用的頁面。 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)
資源資料庫
sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)