sys.dm_db_page_info (Transact-SQL)

Applies to: SQL Server 2019 (15.x) Azure SQL Database Azure SQL Managed Instance

Returns information about a page in a database. The function returns one row that contains the header information from the page, including the object_id, index_id, and partition_id. This function replaces the need to use DBCC PAGE in most cases.

Note

sys.dm_db_page_info is currently supported only in SQL Server 2019 (15.x) and later.

Syntax

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

Arguments

DatabaseId | NULL | DEFAULT

The ID of the database. DatabaseId is smallint. Valid input is the ID number of a database. The default is NULL, however sending a NULL value for this parameter will result in an error.

FileId | NULL | DEFAULT

The ID of the file. FileId is int. Valid input is the ID number of a file in the database specified by DatabaseId. The default is NULL, however sending a NULL value for this parameter will result in an error.

PageId | NULL | DEFAULT

The ID of the page. PageId is int. Valid input is the ID number of a page in the file specified by FileId. The default is NULL, however sending a NULL value for this parameter will result in an error.

Mode | NULL | DEFAULT

Determines the level of detail in the output of the function. 'LIMITED' will return NULL values for all description columns, 'DETAILED' will populate description columns. DEFAULT is 'LIMITED'.

Table returned

Column name Data type Description
database_id int Database ID
file_id int File ID
page_id int Page ID
page_header_version int Page header version
page_type int Page Type
page_type_desc nvarchar(64) Description of the page type
page_type_flag_bits nvarchar(64) Type Flag bits in page header
page_type_flag_bits_desc nvarchar(64) Type flag bits description in page header
page_flag_bits nvarchar(64) Flag bits in page header
page_flag_bits_desc nvarchar(256) Flag bits description in page header
page_lsn nvarchar(64) Log sequence number / timestamp
page_level int Level of the page in index (leaf = 0)
object_id int ID of the object owning the page
index_id int ID of the index (0 for heap data pages)
partition_id bigint ID of the partition
alloc_unit_id bigint ID of the allocation unit
is_encrypted bit Bit to indicate whether or not the page is encrypted
has_checksum bit Bit to indicate whether or not the page has a checksum value
checksum int Stores the checksum value that is used to detect data corruption
is_iam_pg bit Bit to indicate whether or not the page is an IAM page
is_mixed_ext bit Bit to indicate if allocated in a mixed extent
has_ghost_records bit Bit to indicate if the page contains ghost records
A ghosted record is one that has been marked for deletion but has yet to be removed.
has_version_records bit Bit to indicate if the page contains version records used for accelerated database recovery
pfs_page_id int Page ID of corresponding PFS page
pfs_is_allocated bit Bit to indicate whether or not the page is marked as allocated in the corresponding PFS page
pfs_alloc_percent int Allocation percent as indicated by the corresponding PFS byte
pfs_status nvarchar(64) PFS byte
pfs_status_desc nvarchar(64) Description of the PFS byte
gam_page_id int Page ID of the corresponding GAM page
gam_status bit Bit to indicate if allocated in GAM
gam_status_desc nvarchar(64) Description of the GAM status bit
sgam_page_id int Page ID of the corresponding SGAM page
sgam_status bit Bit to indicate if allocated in SGAM
sgam_status_desc nvarchar(64) Description of the SGAM status bit
diff_map_page_id int Page ID of the corresponding differential bitmap page
diff_status bit Bit to indicate if diff status is changed
diff_status_desc nvarchar(64) Description of the diff status bit
ml_map_page_id int Page ID of the corresponding minimal logging bitmap page
ml_status bit Bit to indicate if the page is minimally logged
ml_status_desc nvarchar(64) Description of the minimal logging status bit
prev_page_file_id smallint Previous page file ID
prev_page_page_id int Previous page page ID
next_page_file_id smallint Next page file ID
next_page_page_id int Next page page ID
fixed_length smallint Length of fixed size rows
slot_count smallint Total number of slots (used and unused)
For a data page, this number is equivalent to the number of rows.
ghost_rec_count smallint Number of records marked as ghost on the page
A ghosted record is one that has been marked for deletion but has yet to be removed.
free_bytes smallint Number of free bytes on the page
free_data_offset int Offset of free space at end of data area
reserved_bytes smallint Number of free bytes reserved by all transactions (if heap)
Number of ghosted rows (if index leaf)
reserved_bytes_by_xdes_id smallint Space contributed by m_xdesID to m_reservedCnt
For debugging purposes only
xdes_id nvarchar(64) Latest transaction contributed by m_reserved
For debugging purposes only

Remarks

The sys.dm_db_page_info dynamic management function returns information such as page_id, file_id, index_id, object_id, and so on, that are present in a page header. This information is useful for troubleshooting and debugging various performance (lock and latch contention) and corruption issues.

sys.dm_db_page_info can be used in place of the DBCC PAGE statement in many cases, but it returns only the page header information, not the body of the page. DBCC PAGE will still be needed for use cases where the entire contents of the page are required.

Use in conjunction with other DMVs

One of the important use cases of sys.dm_db_page_info is to join it with other DMVs that expose page information. To facilitate this use case, a new column called page_resource has been added which exposes page information in an 8-byte hexadecimal format. This column has been added to sys.dm_exec_requests and sys.sysprocesses and will be added to other DMVs in the future as needed.

A new function, sys.fn_PageResCracker, takes the page_resource as input and outputs a single row that contains database_id, file_id and page_id. This function can then be used to facilitate joins between sys.dm_exec_requests or sys.sysprocesses and sys.dm_db_page_info.

Permissions

Requires the VIEW DATABASE STATE permission in the database.

Examples

A. Display all the properties of a page

The following query returns one row with all the page information for a given database_id, file_id, page_id combination with default mode ('LIMITED')

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

B. Use sys.dm_db_page_info with other DMVs

The following query returns one row per wait_resource exposed by sys.dm_exec_requests when the row contains a non-null page_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;

See also