sys.dm_db_log_info (Transact-SQL)
S’applique à : SQL Server 2016 (13.x) SP 2 et versions ultérieures Azure SQL Database Azure SQL Managed Instance
Retourne 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 | PAR DÉFAUT
ID de la base de données. database_id est int. Les entrées valides sont le numéro d’ID d’une base de données, 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 retourner les informations VLF de la base de données active.
La fonction intégrée DB_ID peut être spécifiée. Lorsque vous utilisez DB_ID
sans spécifier de nom de base de données, le niveau de compatibilité de la base de données actuelle doit être supérieur ou égal à 90.
Table retournée
Nom de la colonne | Type de données | Description |
---|---|---|
database_id | int | ID de la base de données. Dans Azure SQL Database, 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 | ID de fichier du journal des transactions. |
vlf_begin_offset | bigint | Décalage de l’emplacement du fichier journal virtuel (VLF) à partir du début du fichier journal des transactions. |
vlf_size_mb | float | Taille du fichier journal virtuel (VLF) dans Mo, arrondie à deux décimales. |
vlf_sequence_number | bigint | numéro de séquence du fichier journal virtuel (VLF) dans l’ordre créé. Permet d’identifier de manière unique les fonctions 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 utilisé. 1 - VLF est actif. |
vlf_status | int | État du fichier journal virtuel (VLF). Les valeurs possibles sont les suivantes : 0 - VLF est inactif 1 - VLF est initialisé mais inutilisé 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 de séquence de journal (LSN) du premier enregistrement de journal dans le fichier journal virtuel (VLF). |
vlf_create_lsn | nvarchar(48) | Numéro de séquence de journal (LSN) de l’enregistrement 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 numérique du chiffreur du VLF si le VLF est chiffré à l’aide de Transparent Data Encryption, sinon NULL . |
Notes
La sys.dm_db_log_info
fonction de gestion dynamique 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
Nécessite l’autorisation VIEW SERVER STATE
dans la base de données.
Autorisations pour SQL Server 2022 (et versions plus récentes)
Nécessite 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
Contenu connexe
Commentaires
https://aka.ms/ContentUserFeedback.
Prochainement : Tout au long de l'année 2024, nous supprimerons progressivement les GitHub Issues en tant que mécanisme de retour d'information pour le contenu et nous les remplacerons par un nouveau système de retour d'information. Pour plus d’informations, voir:Soumettre et afficher des commentaires pour