sys.dm_db_page_info (Transact-SQL)
Se aplica a: SQL Server 2019 (15.x) Base de datos de Azure SQL Azure SQL Managed Instance
Devuelve información sobre una página de una base de datos. La función devuelve una fila que contiene la información de encabezado en la página, incluidos object_id
, index_id
y partition_id
. Esta función reemplaza la necesidad de usar DBCC PAGE
en la mayoría de los casos.
Nota:
sys.dm_db_page_info
actualmente solo se admite en SQL Server 2019 (15.x) y versiones posteriores.
Sintaxis
sys.dm_db_page_info ( DatabaseId , FileId , PageId , Mode )
Argumentos
DatabaseId | NULL | VALOR PREDETERMINADO
El Id. de la base de datos. DatabaseId es smallint. La entrada válida es el número de identificación de una base de datos. El valor predeterminado es NULL, pero el envío de un valor NULL para este parámetro producirá un error.
FileId | NULL | VALOR PREDETERMINADO
Identificador del archivo. FileId es int. La entrada válida es el número de identificador de un archivo de la base de datos especificado por DatabaseId. El valor predeterminado es NULL, pero el envío de un valor NULL para este parámetro producirá un error.
PageId | NULL | VALOR PREDETERMINADO
Id. de la página. PageId es int. La entrada válida es el número de identificador de una página en el archivo especificado por FileId. El valor predeterminado es NULL, pero el envío de un valor NULL para este parámetro producirá un error.
Mode | NULL | VALOR PREDETERMINADO
Determina el nivel de detalle en la salida de la función. 'LIMITED'
devolverá valores NULL para todas las columnas de descripción, "DETAILED" rellenará las columnas de descripción. DEFAULT
es 'LIMITED'
.
Tabla devuelta
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
database_id | int | Id. de la base de datos. En Azure SQL Database, los valores son únicos dentro de una base de datos única o un grupo elástico, pero no dentro de un servidor lógico. |
file_id | int | Id. de archivo |
page_id | int | Id. de página |
page_header_version | int | Versión del encabezado de página. |
page_type | int | Tipo de página |
page_type_desc | nvarchar (64) | Descripción del tipo de plan. |
page_type_flag_bits | nvarchar (64) | Escribir bits de marca en el encabezado de página. |
page_type_flag_bits_desc | nvarchar (64) | Escribir la descripción de bits de marca en el encabezado de página. |
page_flag_bits | nvarchar (64) | Bits de marca en el encabezado de página. |
page_flag_bits_desc | nvarchar(256) | Descripción de bits de marca en el encabezado de página. |
page_lsn | nvarchar (64) | Número de secuencia de registro/marca de tiempo. |
page_level | int | Nivel de la página en el índice (hoja = 0). |
object_id | int | Id. del objeto propietario de la página. |
id_de_índice | int | Id. del índice (0 para páginas de datos del montón). |
partition_id | bigint | Id. de la partición. |
alloc_unit_id | bigint | Id. de la unidad de asignación. |
is_encrypted | bit | Bit para indicar si la página está cifrada. |
has_checksum | bit | Bit para indicar si la página tiene un valor de suma de comprobación. |
suma de comprobación | int | Almacena el valor de suma de comprobación que se usa para detectar datos dañados. |
is_iam_pg | bit | Bit para indicar si la página es una página de IAM. |
is_mixed_ext | bit | Bit para indicar si se asigna en una extensión mixta. |
has_ghost_records | bit | Bit para indicar si la página contiene registros fantasma. Un registro fantasma es aquel que se ha marcado para su eliminación, pero que aún no se ha quitado. |
has_version_records | bit | Bit para indicar si la página contiene registros de versión usados para la recuperación acelerada de la base de datos. |
pfs_page_id | int | Id. de página de la página PFS correspondiente. |
pfs_is_allocated | bit | Bit para indicar si la página está marcada como asignada en la página PFS correspondiente. |
pfs_alloc_percent | int | Porcentaje de asignación indicado por el byte PFS correspondiente. |
pfs_status | nvarchar (64) | Byte PFS. |
pfs_status_desc | nvarchar (64) | Descripción del byte PFS. |
gam_page_id | int | Id. de página de la página GAM correspondiente. |
gam_status | bit | Bit para indicar si se asigna en GAM. |
gam_status_desc | nvarchar (64) | Descripción del bit de estado de GAM. |
sgam_page_id | int | Id. de página de la página SGAM correspondiente. |
sgam_status | bit | Bit para indicar si se asigna en SGAM. |
sgam_status_desc | nvarchar (64) | Descripción del bit de estado de SGAM. |
diff_map_page_id | int | Id. de página de la página de mapa de bits diferencial correspondiente. |
diff_status | bit | Bit para indicar si se cambia el estado de diferencia. |
diff_status_desc | nvarchar (64) | Descripción del bit de estado de diferencia. |
ml_map_page_id | int | Id. de página de la página de mapa de bits de registro mínima correspondiente. |
ml_status | bit | Bit para indicar si la página se registra mínimamente. |
ml_status_desc | nvarchar (64) | Descripción del bit de estado de registro mínimo. |
prev_page_file_id | smallint | Id. de archivo de página anterior. |
prev_page_page_id | int | Id. de página anterior. |
next_page_file_id | smallint | Id. de archivo de página siguiente. |
next_page_page_id | int | Id. de página siguiente. |
fixed_length | smallint | Longitud de filas de tamaño fijo. |
slot_count | smallint | Número total de ranuras (usadas y sin usar). Para una página de datos, este número es equivalente al número de filas. |
ghost_rec_count | smallint | Número de registros marcados como fantasma en la página. Un registro fantasma es aquel que se ha marcado para su eliminación, pero que aún no se ha quitado. |
free_bytes | smallint | Número de bytes libres en la página. |
free_data_offset | int | Desplazamiento del espacio libre al final del área de datos. |
reserved_bytes | smallint | Número de bytes libres reservados por todas las transacciones (si hay montón). Número de filas fantasma (si hay hoja de índice). |
reserved_bytes_by_xdes_id | smallint | Espacio contribuido por m_xdesID a m_reservedCnt. Solo con fines de depuración. |
xdes_id | nvarchar (64) | Transacción más reciente aportada por m_reserved. Solo con fines de depuración. |
Comentarios
La función de administración dinámica sys.dm_db_page_info
devuelve información como page_id
, file_id
, index_id
, object_id
, etc., que están presentes en un encabezado de página. Esta información es útil para solucionar y depurar varios problemas de rendimiento (contención de bloqueos y bloqueos temporales) y daños.
sys.dm_db_page_info
se puede usar en lugar de la instrucción DBCC PAGE
en muchos casos, pero solo devuelve la información del encabezado de página, no el cuerpo de la página. DBCC PAGE
seguirá siendo necesario para los casos de uso en los que se requiera todo el contenido de la página.
Uso junto con otras DMV
Uno de los casos de uso importantes de sys.dm_db_page_info
es unirlo con otras DMV que exponen información de página. Para facilitar este caso de uso, se ha agregado una nueva columna denominada page_resource
que expone información de página en un formato hexadecimal de 8 bytes. Esta columna se ha agregado a sys.dm_exec_requests
y sys.sysprocesses
se agregará a otras DMV en el futuro según sea necesario.
Una nueva función, sys.fn_PageResCracker
, toma page_resource
como entrada y genera una sola fila que contiene database_id
, file_id
y page_id
. A continuación, esta función se puede usar para facilitar las combinaciones entre sys.dm_exec_requests
o sys.sysprocesses
y sys.dm_db_page_info
.
Permisos
Se necesita el permiso VIEW DATABASE STATE
en la base de datos.
Permisos para SQL Server 2022 y versiones posteriores
Requiere el permiso VIEW DATABASE PERFORMANCE STATE en la base de datos.
Ejemplos
A Visualización de todas las propiedades de una página
La consulta siguiente devuelve una fila con toda la información de página de una combinación de database_id
, file_id
y page_id
determinada con el modo predeterminado ("LIMITED").
SELECT *
FROM sys.dm_db_page_info (5, 1, 15, DEFAULT);
B. Uso de sys.dm_db_page_info con otras DMV
La consulta siguiente devuelve una fila por wait_resource
expuesta por sys.dm_exec_requests
cuando la fila contiene un valor page_resource
distinto de NULL.
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;