sys.dm_db_log_info (Transact-SQL)
Gilt für: SQL Server 2016 (13.x) SP 2 und höher Azure SQL-Datenbank Azure SQL verwaltete Instanz
Gibt VLF-Informationen (Virtual Log File) des Transaktionsprotokolls zurück. Beachten Sie, dass alle Transaktionsprotokolldateien in der Tabellenausgabe kombiniert werden. Jede Zeile in der Ausgabe stellt eine VLF im Transaktionsprotokoll dar und stellt informationen bereit, die für diese VLF im Protokoll relevant sind.
Syntax
sys.dm_db_log_info ( database_id )
Argumente
database_id | NULL | STANDARD
Ist die ID der Datenbank. database_id ist int. Gültige Eingaben sind die ID-Nummer einer Datenbank, NULL oder DEFAULT. Der -Standardwert ist NULL. NULL und DEFAULT sind gleichwertige Werte im Kontext der aktuellen Datenbank.
Geben Sie NULL an, um VLF-Informationen der aktuellen Datenbank zurückzugeben.
Die integrierte Funktion DB_ID kann angegeben werden. Bei Verwendung DB_ID
ohne Angabe eines Datenbanknamens muss die Kompatibilitätsebene der aktuellen Datenbank 90 oder höher sein.
Zurückgegebene Tabelle
Spaltenname | Datentyp | Beschreibung |
---|---|---|
database_id | int | Datenbank-ID In Azure SQL-Datenbank sind die Werte innerhalb einer einzelnen Datenbank oder eines elastischen Pools eindeutig, aber nicht innerhalb eines logischen Servers. |
file_id | smallint | Die Datei-ID des Transaktionsprotokolls. |
vlf_begin_offset | bigint | Offsetspeicherort der virtuellen Protokolldatei (VLF) vom Anfang der Transaktionsprotokolldatei. |
vlf_size_mb | float | Größe der virtuellen Protokolldatei (Virtual Log File, VLF) in MB, gerundet auf zwei Dezimalstellen. |
vlf_sequence_number | bigint | VLF-Sequenznummer (Virtual Log File) in der erstellten Reihenfolge. Wird verwendet, um VLFs in der Protokolldatei eindeutig zu identifizieren. |
vlf_active | bit | Gibt an, ob die virtuelle Protokolldatei (VLF) verwendet wird oder nicht. 0 - VLF wird nicht verwendet. 1 – VLF ist aktiv. |
vlf_status | int | Status der virtuellen Protokolldatei (VLF) Mögliche Werte sind: 0 – VLF ist inaktiv 1 – VLF wird initialisiert, aber nicht verwendet 2 – VLF ist aktiv. |
vlf_parity | tinyint | Parität der virtuellen Protokolldatei (VLF) Wird intern verwendet, um das Ende des Protokolls in einem VLF zu bestimmen. |
vlf_first_lsn | nvarchar(48) | Log sequence number (LSN) of the first log record in the virtual log file (VLF). |
vlf_create_lsn | nvarchar(48) | Log sequence number (LSN) of the log record that created the virtual log file (VLF). |
vlf_encryptor_thumbprint | varbinary(20) | Gilt für: SQL Server 2019 (15.x) und höher Zeigt den Fingerabdruck des Verschlüsselungsmoduls des VLF an, wenn das VLF mit transparenter Datenverschlüsselung verschlüsselt ist, andernfalls NULL . |
Hinweise
Die sys.dm_db_log_info
dynamische Verwaltungsfunktion ersetzt die DBCC LOGINFO
Anweisung.
Die Formel für die Anzahl der VLFs, die auf einem Wachstumsereignis basieren, ist im SQL Server Transaction Log Architecture and Management Guide beschrieben. Diese Formel hat sich leicht geändert, beginnend mit SQL Server 2022 (16.x).
Berechtigungen
Erfordert die VIEW SERVER STATE
Berechtigung in der Datenbank.
Berechtigungen für SQL Server 2022 und höher
Erfordert DIE BERECHTIGUNG "DATENBANKLEISTUNGSSTATUS ANZEIGEN" für die Datenbank.
Beispiele
.A Ermitteln von Datenbanken in einer SQL Server-Instanz mit hoher Anzahl von VLFs
Die folgende Abfrage bestimmt die Datenbanken mit mehr als 100 VLFs in den Protokolldateien, die sich auf den Start, die Wiederherstellung und die Wiederherstellungszeit der Datenbank auswirken können.
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. Ermitteln der Position des letzten VLF
Transaktionsprotokolls vor dem Verkleinern der Protokolldatei
Die folgende Abfrage kann verwendet werden, um die Position des letzten aktiven VLF zu bestimmen, bevor SIE SHRINK FILE im Transaktionsprotokoll ausführen, um festzustellen, ob das Transaktionsprotokoll verkleinern kann.
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
Zugehöriger Inhalt
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für