sys.dm_db_log_info (Transact-SQL)sys.dm_db_log_info (Transact-SQL)
SQL Server 2016 с пакетом обновления 2 (SP2) и более поздние версии
База данных SQL Azure
Azure Synapse Analytics
Parallel Data Warehouse
Возвращает сведения о файле виртуального журнала (VLF) журнала транзакций.Returns virtual log file (VLF) information of the transaction log. Примечание. все файлы журнала транзакций объединяются в выходные данные таблицы.Note all transaction log files are combined in the table output. Каждая строка выходных данных представляет собой VLF в журнале транзакций и предоставляет сведения, относящиеся к этому VLF в журнале.Each row in the output represents a VLF in the transaction log and provides information relevant to that VLF in the log.
СинтаксисSyntax
sys.dm_db_log_info ( database_id )
АргументыArguments
database_id | NULL | ПАРАМЕТРЫdatabase_id | NULL | DEFAULT
Идентификатор базы данных.Is the ID of the database. database_id имеет тип int. Допустимыми входными значениями являются идентификатор базы данных, значение NULL или значение по умолчанию.database_id is int. Valid inputs are the ID number of a database, NULL, or DEFAULT. Значение по умолчанию — NULL.The default is NULL. Значения NULL и DEFAULT являются эквивалентными значениями в контексте текущей базы данных.NULL and DEFAULT are equivalent values in the context of current database.
Укажите значение NULL, чтобы вернуть сведения о VLF текущей базы данных.Specify NULL to return VLF information of the current database.
Может быть указана встроенная функция DB_ID.The built-in function DB_ID can be specified. При использовании DB_ID
без указания имени базы данных уровень совместимости текущей базы данных должен быть 90 или выше.When using DB_ID
without specifying a database name, the compatibility level of the current database must be 90 or greater.
Возвращаемая таблицаTable Returned
Имя столбцаColumn name | Тип данныхData type | ОписаниеDescription |
---|---|---|
database_iddatabase_id | intint | Идентификатор базы данных.Database ID. |
file_idfile_id | smallintsmallint | Идентификатор файла журнала транзакций.File id of the transaction log. |
vlf_begin_offsetvlf_begin_offset | bigintbigint | Смещение расположения виртуального файла журнала (VLF) с начала файла журнала транзакций.Offset location of the virtual log file (VLF) from the beginning of the transaction log file. |
vlf_size_mbvlf_size_mb | floatfloat | размер виртуального файла журнала (VLF) в МБ, округленный до двух десятичных разрядов.virtual log file (VLF) size in MB, rounded to 2 decimal places. |
vlf_sequence_numbervlf_sequence_number | bigintbigint | порядковый номер файла виртуального журнала (VLF) в созданном порядке.virtual log file (VLF) sequence number in the created order. Используется для уникальной идентификации VLF в файле журнала.Used to uniquely identify VLFs in log file. |
vlf_activevlf_active | bitbit | Указывает, используется ли виртуальный файл журнала (VLF) .Indicates whether virtual log file (VLF) is in use or not. 0 — VLF не используется.0 - VLF is not in use. 1 — VLF является активным.1 - VLF is active. |
vlf_statusvlf_status | intint | Состояние виртуального файла журнала (VLF).Status of the virtual log file (VLF). Возможные значения:Possible values include 0 — VLF неактивен0 - VLF is inactive 1 — VLF инициализирован, но не используется1 - VLF is initialized but unused 2 — VLF активно.2 - VLF is active. |
vlf_parityvlf_parity | tinyinttinyint | Четность виртуального файла журнала (VLF). Используется внутренне для определения конца журнала в 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) | Регистрационный номер транзакции в журнале (LSN) первой записи журнала в виртуальном файле журнала (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) | Регистрационный номер транзакции в журнале (LSN) для записи журнала, создавшей виртуальный файл журнала (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) | Применимо к: SQL Server 2019 (15.x)SQL Server 2019 (15.x)Applies to: SQL Server 2019 (15.x)SQL Server 2019 (15.x) Показывает отпечаток шифратора VLF, если VLF шифруется с помощью прозрачное шифрование данных, в противном случае — null.Shows the thumbprint of the encryptor of the VLF if the VLF is encrypted using Transparent Data Encryption, otherwise NULL. |
КомментарииRemarks
sys.dm_db_log_info
Функция динамического управления заменяет DBCC LOGINFO
инструкцию.The sys.dm_db_log_info
dynamic management function replaces the DBCC LOGINFO
statement.
РазрешенияPermissions
Требуется VIEW DATABASE STATE
разрешение в базе данных.Requires the VIEW DATABASE STATE
permission in the database.
ПримерыExamples
A.A. Деусловие базы данных в экземпляре SQL Server с большим количеством VLFDeterming databases in a SQL Server instance with high number of VLFs
Следующий запрос определяет базы данных с более чем 100 VLF в файлах журнала, что может повлиять на время запуска, восстановления и восстановления базы данных.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. Расположение последнего VLF
в журнале транзакций до сжатия файла журналаDeterming the position of the last VLF
in transaction log before shrinking the log file
Следующий запрос можно использовать для определения расположения последнего активного VLF перед выполнением команды SHRINKFILE в журнале транзакций, чтобы определить, может ли журнал транзакций сжиматься.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
См. также:See Also
Динамические административные представления и функции (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
Динамические административные представления, связанные с базами данных ()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)