sys.dm_db_log_info (Transact-SQL)
Se aplica a: SQL Server 2016 (13.x) SP 2 y versiones posteriores Azure SQL Database Azure SQL Managed Instance
Devuelve información del archivo de registro virtual (VLF) del registro de transacciones. Tenga en cuenta que todos los archivos de registro de transacciones se combinan en la salida de la tabla. Cada fila de la salida representa un VLF en el registro de transacciones y proporciona información relevante para ese VLF en el registro.
Sintaxis
sys.dm_db_log_info ( database_id )
Argumentos
database_id | NULL | DEFAULT
Es el Id. de la base de datos. database_id is int. Las entradas válidas son el número de identificador de una base de datos, NULL o DEFAULT. El valor predeterminado de es NULL. NULL y DEFAULT son valores equivalentes en el contexto de la base de datos actual.
Especifique NULL para devolver información de VLF de la base de datos actual.
Se puede especificar la función integrada DB_ID. Al usar DB_ID
sin especificar ningún nombre de base de datos, el nivel de compatibilidad de la base de datos actual debe ser 90 o superior.
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 | smallint | El Id. de archivo del registro de transacciones. |
vlf_begin_offset | bigint | Ubicación de desplazamiento del archivo de registro virtual (VLF) desde el principio del archivo de registro de transacciones. |
vlf_size_mb | float | Tamaño del archivo de registro virtual (VLF) en MB, redondeado a dos posiciones decimales. |
vlf_sequence_number | bigint | Número de secuencia del archivo de registro virtual (VLF) en el orden creado. Se usa para identificar VLF de forma única en el archivo de registro. |
vlf_active | bit | Indica si el archivo de registro virtual (VLF) está en uso o no. 0 - VLF no está en uso. 1 - VLF está activo. |
vlf_status | int | Estado del archivo de registro virtual (VLF). Los valores posibles son 0 - VLF está inactivo 1 - VLF se inicializa pero no se usa 2 - VLF está activo. |
vlf_parity | tinyint | Paridad del archivo de registro virtual (VLF). Se usa internamente para determinar el final del registro dentro de un VLF. |
vlf_first_lsn | nvarchar(48) | Número de secuencia de registro (LSN) del primer registro del archivo de registro virtual (VLF). |
vlf_create_lsn | nvarchar(48) | Número de secuencia de registro (LSN) del primer registro que creó el archivo de registro virtual (VLF). |
vlf_encryptor_thumbprint | varbinary(20) | Se aplica a: SQL Server 2019 (15.x) y versiones posteriores Muestra la huella digital del cifrador del VLF si el VLF se cifra mediante cifrado de datos transparente; de lo contrario, NULL . |
Comentarios
La función de administración dinámica sys.dm_db_log_info
reemplaza la instrucción DBCC LOGINFO
.
La fórmula para el número de VLF que se crean en función de un evento de crecimiento se detalla en la Guía de administración y arquitectura del registro de transacciones de SQL Server. Esta fórmula cambió ligeramente a partir de SQL Server 2022 (16.x).
Permisos
Se necesita el permiso VIEW SERVER 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 Determinación de bases de datos en una instancia de SQL Server con un gran número de VLF
La consulta siguiente determina las bases de datos con más de 100 VLF en los archivos de registro, lo que puede afectar al inicio, la restauración y el tiempo de recuperación de la base de datos.
SELECT [name], COUNT(l.database_id) AS 'vlf_count'
FROM sys.databases AS s
CROSS APPLY sys.dm_db_log_info(s.database_id) AS l
GROUP BY [name]
HAVING COUNT(l.database_id) > 100;
B. Determinación de la posición del último VLF
del registro de transacciones antes de reducir el archivo de registro
La consulta siguiente se puede usar para determinar la posición del último VLF activo antes de ejecutar SHRINK FILE en el registro de transacciones para determinar si el registro de transacciones se puede reducir.
USE AdventureWorks2022;
GO
;WITH cte_vlf AS (
SELECT ROW_NUMBER() OVER(ORDER BY vlf_begin_offset) AS vlfid, DB_NAME(database_id) AS [Database Name], vlf_sequence_number, vlf_active, vlf_begin_offset, vlf_size_mb
FROM sys.dm_db_log_info(DEFAULT)),
cte_vlf_cnt AS (SELECT [Database Name], COUNT(vlf_sequence_number) AS vlf_count,
(SELECT COUNT(vlf_sequence_number) FROM cte_vlf WHERE vlf_active = 0) AS vlf_count_inactive,
(SELECT COUNT(vlf_sequence_number) FROM cte_vlf WHERE vlf_active = 1) AS vlf_count_active,
(SELECT MIN(vlfid) FROM cte_vlf WHERE vlf_active = 1) AS ordinal_min_vlf_active,
(SELECT MIN(vlf_sequence_number) FROM cte_vlf WHERE vlf_active = 1) AS min_vlf_active,
(SELECT MAX(vlfid) FROM cte_vlf WHERE vlf_active = 1) AS ordinal_max_vlf_active,
(SELECT MAX(vlf_sequence_number) FROM cte_vlf WHERE vlf_active = 1) AS max_vlf_active
FROM cte_vlf
GROUP BY [Database Name])
SELECT [Database Name], vlf_count, min_vlf_active, ordinal_min_vlf_active, max_vlf_active, ordinal_max_vlf_active,
((ordinal_min_vlf_active-1)*100.00/vlf_count) AS free_log_pct_before_active_log,
((ordinal_max_vlf_active-(ordinal_min_vlf_active-1))*100.00/vlf_count) AS active_log_pct,
((vlf_count-ordinal_max_vlf_active)*100.00/vlf_count) AS free_log_pct_after_active_log
FROM cte_vlf_cnt;
GO