sys.dm_db_page_info (Transact-SQL)

適用於:SQL Server 2019 (15.x)Azure SQL DatabaseAzure SQL 受控執行個體

傳回資料庫中頁面的相關資訊。 此函式會傳回一個包含頁面中標頭資訊的資料列,包括 object_idindex_idpartition_id。 在大部分情況下,有此函式就不需要使用 DBCC PAGE

注意

sys.dm_db_page_info 目前僅在 SQL Server 2019 (15.x) 和更新版本中才受支援。

語法

sys.dm_db_page_info ( DatabaseId , FileId , PageId , Mode )

引數

DatabaseId | NULL | DEFAULT

資料庫的識別碼。 DatabaseIdsmallint。 有效的輸入是資料庫的識別碼。 預設值為 NULL,不過傳送此參數的 NULL 值將會導致錯誤。

FileId | NULL | DEFAULT

檔案的 ID。 FileIdint。有效的輸入是 DatabaseId 所指定之資料庫中檔案的識別碼。 預設值為 NULL,不過傳送此參數的 NULL 值將會導致錯誤。

PageId | NULL | DEFAULT

頁面的識別碼。 PageIdint。有效的輸入是 FileId 所指定之檔案中頁面的識別碼。 預設值為 NULL,不過傳送此參數的 NULL 值將會導致錯誤。

Mode | NULL | DEFAULT

決定函式輸出中的詳細資料層級。 'LIMITED' 會傳回所有描述資料行的 NULL 值,'DETAILED' 會填入描述資料行。 DEFAULT'LIMITED'

傳回的表格

資料行名稱 資料類型 描述
database_id int 資料庫識別碼。

在 Azure SQL 資料庫中,這些值在單一資料庫或彈性集區內是唯一的,但在邏輯伺服器內則不是唯一的。
file_id int 檔案識別碼
page_id int 頁面識別碼
page_header_version int 頁面標頭版本
page_type int 頁面類型
page_type_desc nvarchar(64) 頁面類型的描述
page_type_flag_bits nvarchar(64) 頁面標頭中的類型旗標位元
page_type_flag_bits_desc nvarchar(64) 頁面標頭中的類型旗標位元描述
page_flag_bits nvarchar(64) 頁面標頭中的旗標位元
page_flag_bits_desc nvarchar(256) 頁面標頭中的旗標位元描述
page_lsn nvarchar(64) 記錄序號/時間戳記
page_level int 索引中頁面的層級 (分葉 = 0)
object_id int 擁有頁面的物件識別碼
index_id int 索引的識別碼 (0 代表堆積資料頁面)
partition_id bigint 資料分割的識別碼
alloc_unit_id bigint 配置單位的識別碼
is_encrypted bit 指出頁面是否已加密的位元
has_checksum bit 指出頁面是否有總和檢查碼值的位元
總和檢查碼 int 儲存用來偵測資料損毀的總和檢查碼值
is_iam_pg bit 指出頁面是否為 IAM 頁面的位元
is_mixed_ext bit 指出是否在混合範圍中配置的位元
has_ghost_records bit 指出頁面是否包含准刪除記錄的位元
准刪除的記錄是已標示要刪除但尚未移除的記錄。
has_version_records bit 指出頁面是否包含用於加速資料庫復原的版本記錄的位元
pfs_page_id int 對應 PFS 頁面的頁面識別碼
pfs_is_allocated bit 指出頁面是否在對應 PFS 頁面中標示為已配置的位元
pfs_alloc_percent int 對應 PFS 位元組所指出的配置百分比
pfs_status nvarchar(64) PFS 位元組
pfs_status_desc nvarchar(64) PFS 位元組的描述
gam_page_id int 對應 GAM 頁面的頁面識別碼
gam_status bit 指出是否在 GAM 中配置的位元
gam_status_desc nvarchar(64) GAM 狀態位元的描述
sgam_page_id int 對應 SGAM 頁面的頁面識別碼
sgam_status bit 指出是否在 SGAM 中配置的位元
sgam_status_desc nvarchar(64) SGAM 狀態位元的描述
diff_map_page_id int 對應差異點陣圖頁面的頁面識別碼
diff_status bit 指出差異狀態是否已變更的位元
diff_status_desc nvarchar(64) 差異狀態位元的描述
ml_map_page_id int 對應最小記錄點陣圖頁面的頁面識別碼
ml_status bit 指出頁面是否以最小方式記錄的位元
ml_status_desc nvarchar(64) 最小記錄狀態位元的描述
prev_page_file_id smallint 上一頁檔案識別碼
prev_page_page_id int 上一頁頁面識別碼
next_page_file_id smallint 下一頁檔案識別碼
next_page_page_id int 下一頁頁面識別碼
fixed_length smallint 固定大小資料列的長度
slot_count smallint 位置的總數 (已使用及未使用)
對於資料頁面,此數相當於資料列數目。
ghost_rec_count smallint 頁面上標示為准刪除的記錄數目
准刪除的記錄是已標示要刪除但尚未移除的記錄。
free_bytes smallint 頁面上的可用位元組數目
free_data_offset int 資料區結尾的可用空間位移
reserved_bytes smallint 所有交易所保留的可用位元組數目 (如果是堆積的話)
准刪除資料列的數目 (如果是索引分葉的話)
reserved_bytes_by_xdes_id smallint 由 m_xdesID 提供給 m_reservedCnt 的空間
僅供偵錯之用
xdes_id nvarchar(64) m_reserved 所提供的最新交易
僅供偵錯之用

備註

sys.dm_db_page_info 動態管理函式會傳回頁面標頭中存在的資訊,例如 page_idfile_idindex_idobject_id 等等。 此資訊對於疑難排解及偵錯各種效能 (鎖定和閂鎖爭用) 和損毀問題很有用。

sys.dm_db_page_info 在很多情況下可以用來代替 DBCC PAGE 陳述式,但其只會傳回頁面標頭資訊,而不會傳回頁面的內文。 對於需要頁面全部內容的使用案例,仍然需要 DBCC PAGE

與其他 DMV 搭配使用

sys.dm_db_page_info 的其中一個重要使用案例是將其與公開頁面資訊的其他 DMV 聯結。 為了方便進行此使用案例,已新增了一個名為 page_resource 的新資料行,其以 8 位元組十六進位格式公開頁面資訊。 此資料行已新增至 sys.dm_exec_requestssys.sysprocesses,未來將會視需要新增至其他 DMV。

新的函式 sys.fn_PageResCracker 會採用 page_resource 作為輸入,並輸出包含 database_idfile_idpage_id 的單一資料列。 然後,您可以使用此函式來促進 sys.dm_exec_requestssys.sysprocessessys.dm_db_page_info 之間的聯結。

權限

需要資料庫中的 VIEW DATABASE STATE 權限。

SQL Server 2022 和更新版本的權限

需要資料庫上的 VIEW DATABASE PERFORMANCE STATE 權限。

範例

A. 顯示頁面的所有屬性

下列查詢會傳回一個資料列,其中包含指定 database_idfile_idpage_id 組合的所有頁面資訊,以及預設模式 ('LIMITED')

SELECT *
FROM sys.dm_db_page_info (5, 1, 15, DEFAULT);

B. 搭配其他 DMV 使用 sys.dm_db_page_info

當資料列包含非 Null page_resource 時,下列查詢會根據 sys.dm_exec_requests 所公開的 wait_resource 傳回一個資料列

SELECT page_info.*
FROM sys.dm_exec_requests AS d
CROSS APPLY sys.fn_PageResCracker(d.page_resource) AS r
CROSS APPLY sys.dm_db_page_info(r.db_id, r.file_id, r.page_id, 'LIMITED') AS page_info;

另請參閱