sys.dm_db_log_info (Transact-SQL)sys.dm_db_log_info (Transact-SQL)

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Gibt virtuelle Protokolldatei (VLF) Informationen des Transaktionsprotokolls.Returns virtual log file (VLF) information of the transaction log. Beachten Sie, dass es sich bei allen Transaktionsprotokolldateien in der Tabellenausgabe kombiniert werden.Note all transaction log files are combined in the table output. Jede Zeile in der Ausgabe stellt eine VLF in das Transaktionsprotokoll und stellt Informationen zu diesem VLF im Protokoll.Each row in the output represents a VLF in the transaction log and provides information relevant to that VLF in the log.

SyntaxSyntax

sys.dm_db_log_info ( database_id )  

ArgumenteArguments

Database_id | NULL | STANDARDWERTdatabase_id | NULL | DEFAULT
Ist die ID der Datenbank.Is the ID of the database. database_id ist vom Datentyp int. Gültige Eingaben sind die ID-Nummer, der eine Datenbank, NULL oder DEFAULT.database_id is int. Valid inputs are the ID number of a database, NULL, or DEFAULT. Die Standardeinstellung ist NULL.The default is NULL. NULL und DEFAULT sind gleichwertig im Kontext der aktuellen Datenbank.NULL and DEFAULT are equivalent values in the context of current database.

Geben Sie NULL an, wenn Sie VLF-Informationen der aktuellen Datenbank zurückgegeben werden sollen.Specify NULL to return VLF information of the current database.

Die integrierte Funktion DB_ID kann angegeben werden.The built-in function DB_ID can be specified. Bei Verwendung DB_ID ohne Angabe eines Datenbanknamens, muss der Kompatibilitätsgrad der aktuellen Datenbank 90 oder höher sein.When using DB_ID without specifying a database name, the compatibility level of the current database must be 90 or greater.

Zurückgegebene TabelleTable Returned

SpaltennameColumn name DatentypData type BeschreibungDescription
database_iddatabase_id intint Datenbank-IDDatabase ID.
file_idfile_id smallintsmallint Datei-Id des Transaktionsprotokolls.File id of the transaction log.
vlf_begin_offsetvlf_begin_offset bigintbigint Speicherort der Offset der virtuelle Protokolldatei (VLF) vom Anfang der Transaktionsprotokolldatei.Offset location of the virtual log file (VLF) from the beginning of the transaction log file.
vlf_size_mbvlf_size_mb floatfloat virtuelle Protokolldatei (VLF) Größe in MB, die auf 2 Dezimalstellen gerundet.virtual log file (VLF) size in MB, rounded to 2 decimal places.
vlf_sequence_numbervlf_sequence_number bigintbigint virtuelle Protokolldatei (VLF) Sequenznummer in der Reihenfolge erstellt.virtual log file (VLF) sequence number in the created order. Verwendet, um VLFs erstellt, in die Protokolldatei eindeutig identifiziert.Used to uniquely identify VLFs in log file.
vlf_activevlf_active bitbit Gibt an, ob virtuelle Protokolldatei (VLF) wird oder nicht.Indicates whether virtual log file (VLF) is in use or not.
0 – wird VLF nicht verwendet.0 - VLF is not in use.
1 – VLF ist aktiv.1 - VLF is active.
vlf_statusvlf_status intint Status der virtuelle Protokolldatei (VLF).Status of the virtual log file (VLF). Zulässige Werte:Possible values include
0 – VLF ist inaktiv0 - VLF is inactive
1 – VLF wird initialisiert, aber nicht verwendete1 - VLF is initialized but unused
2 – VLF ist aktiv.2 - VLF is active.
vlf_parityvlf_parity tinyinttinyint Parität des virtuelle Protokolldatei (VLF). Wird intern verwendet, um zu bestimmen, das Ende des Protokolls in eine VLF.Parity of virtual log file (VLF).Used internally to determine the end of log within a VLF.
vlf_first_lsnvlf_first_lsn nvarchar(48)nvarchar(48) Protokollsequenznummer (LSN) des ersten Protokolldatensatzes in der virtuelle Protokolldatei (VLF).Log sequence number (LSN) of the first log record in the virtual log file (VLF).
vlf_create_lsnvlf_create_lsn nvarchar(48)nvarchar(48) Protokollsequenznummer (LSN) des Protokolls zu zeichnen, erstellt die virtuelle Protokolldatei (VLF).Log sequence number (LSN) of the log record that created the virtual log file (VLF).
vlf_encryptor_thumbprintvlf_encryptor_thumbprint varbinary(20)varbinary(20) Gilt für: SQL Server 2019 (15.x)SQL Server 2019 (15.x)Applies to: SQL Server 2019 (15.x)SQL Server 2019 (15.x)

Zeigt dem Fingerabdruck der Verschlüsselung von der VLF, wenn die VLF mit verschlüsselt ist Transparent Data Encryption, andernfalls NULL.Shows the thumbprint of the encryptor of the VLF if the VLF is encrypted using Transparent Data Encryption, otherwise NULL.

HinweiseRemarks

Die sys.dm_db_log_info dynamische Verwaltungsfunktion ersetzt die DBCC LOGINFO Anweisung.The sys.dm_db_log_info dynamic management function replaces the DBCC LOGINFO statement.

BerechtigungenPermissions

Erfordert die VIEW DATABASE STATE Berechtigung in der Datenbank.Requires the VIEW DATABASE STATE permission in the database.

BeispieleExamples

A.A. Ermittlung von Datenbanken in einer SQL Server-Instanz mit hohen Zahl von VLFsDeterming databases in a SQL Server instance with high number of VLFs

Die folgende Abfrage bestimmt die Datenbanken mit mehr als 100 VLFs erstellt, in den Protokolldateien, die die Datenbank beim Start und Wiederherstellung, die Zeit auswirken können.The following query determines the databases with more than 100 VLFs in the log files, which can affect the database startup, restore, and recovery time.

SELECT [name], COUNT(l.database_id) AS 'vlf_count' 
FROM sys.databases s
CROSS APPLY sys.dm_db_log_info(s.database_id) l
GROUP BY [name]
HAVING COUNT(l.database_id) > 100

B.B. Sehen die Position des letzten VLF im Transaktionsprotokoll vor dem Verkleinern der Protokolldatei.Determing the position of the last VLF in transaction log before shrinking the log file

Die folgende Abfrage kann verwendet werden, um zu bestimmen die Position der letzten VLF des aktiven vor dem Ausführen von Shrinkfile Transaktionsprotokoll, um festzustellen, ob das Transaktionsprotokoll verkleinert werden kann.The following query can be used to determine the position of the last active VLF before running shrinkfile on transaction log to determine if transaction log can shrink.

USE AdventureWorks2016
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

Siehe auchSee Also

Dynamische Verwaltungssichten und -funktionen (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
Dynamische Verwaltungssichten in Verbindung mit Datenbank (Transact-SQL) Database Related Dynamic Management Views (Transact-SQL)
sys.dm_db_log_space_usage (Transact-SQL) sys.dm_db_log_space_usage (Transact-SQL)
sys.dm_db_log_stats (Transact-SQL)sys.dm_db_log_stats (Transact-SQL)