sys.dm_db_log_info (Transact-SQL)
S’applique à : SQL Server 2016 (13.x) SP 2 et versions ultérieures base de données Azure SQL Azure SQL Managed Instance
Renvoie les informations du fichier journal virtuel (VLF) du journal des transactions. Notez que tous les fichiers journaux des transactions sont combinés dans la sortie de la table. Chaque ligne de la sortie représente un VLF dans le journal des transactions et fournit des informations pertinentes pour ce VLF dans le journal.
Syntaxe
sys.dm_db_log_info ( database_id )
Arguments
database_id | NULL | DEFAULT
Est l’identificateur de la base de données. database_id is int. Les entrées autorisées sont l'ID d'une base de données ou la valeur NULL ou DEFAULT. Le par défaut est NULL. NULL et DEFAULT sont des valeurs équivalentes dans le contexte de la base de données active.
Spécifiez NULL pour renvoyer les informations VLF de la base de données actuelle.
La fonction intégrée DB_ID peut être spécifiée. Si vous utilisez DB_ID
sans spécifier de nom de base de données, le niveau de compatibilité de la base de données active doit être égal à 90 ou plus.
Table retournée
Nom de la colonne | Type de données | Description |
---|---|---|
database_id | int | ID de la base de données. Dans la base de données Azure SQL, les valeurs sont uniques au sein d’une base de données unique ou d’un pool élastique, mais pas dans un serveur logique. |
file_id | smallint | L’identificateur du fichier journal des transactions. |
vlf_begin_offset | bigint | Emplacement de décalage du fichier journal virtuel (VLF) depuis le début du fichier journal des transactions. |
vlf_size_mb | float | Taille du fichier journal virtuel (VLF) en Mo, arrondie à deux décimales. |
vlf_sequence_number | bigint | Numéro de séquence du fichier journal virtuel (VLF) dans l’ordre créé. Utilisé pour identifier de manière unique les VLF dans le fichier journal. |
vlf_active | bit | Indique si le fichier journal virtuel (VLF) est en cours d’utilisation ou non. 0 - VLF n’est pas en cours d’utilisation. 1 - VLF est actif. |
vlf_status | int | État du fichier journal virtuel (VLF). Les valeurs possibles sont 0 - VLF est inactif 1 - VLF est initialisé mais pas en cours d’utilisation 2 - VLF est actif. |
vlf_parity | tinyint | Parité du fichier journal virtuel (VLF). Utilisé en interne pour déterminer la fin du journal dans un VLF. |
vlf_first_lsn | nvarchar(48) | Numéro séquentiel dans le journal (LSN) du premier enregistrement de journal dans le fichier journal virtuel (VLF). |
vlf_create_lsn | nvarchar(48) | Numéro de séquence du journal (LSN) de l’enregistrement du journal qui a créé le fichier journal virtuel (VLF). |
vlf_encryptor_thumbprint | varbinary(20) | S’applique à : SQL Server 2019 (15.x) et versions ultérieures Affiche l’empreinte digitale du chiffreur du VLF si le VLF est chiffré à l’aide du Transparent Data Encryption, sinon NULL . |
Notes
La fonction de gestion dynamique sys.dm_db_log_info
remplace l’instruction DBCC LOGINFO
.
La formule du nombre de VLF créées en fonction d’un événement de croissance est détaillée dans le Guide de gestion et d’architecture du journal des transactions SQL Server. Cette formule a changé légèrement à partir de SQL Server 2022 (16.x).
autorisations
Requiert l’autorisation VIEW SERVER STATE
sur la base de données.
Autorisations pour SQL Server 2022 (et versions plus récentes)
Requiert l'autorisation VIEW DATABASE PERFORMANCE STATE sur la base de données.
Exemples
R. Déterminer les bases de données dans une instance SQL Server avec un nombre élevé de fonctions VLF
La requête suivante détermine les bases de données avec plus de 100 VLF dans les fichiers journaux, ce qui peut affecter le temps de démarrage, de restauration et de récupération de la base de données.
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. Déterminer la position du dernier VLF
dans le journal des transactions avant de réduire le fichier journal
La requête suivante peut être utilisée pour déterminer la position du dernier VLF actif avant d’exécuter SHRINK FILE dans le journal des transactions pour déterminer si le journal des transactions peut être réduit.
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