sys.dm_os_buffer_descriptors (Transact-SQL)
適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics 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)
Resource 資料庫
sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應