Ескерім
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения:SQL Server 2016 (13.x) с пакетом обновления 2 (SP 2) и более поздних
версий База данных SQL Azure Управляемый экземпляр SQL Azure
Возвращает сведения о виртуальном файле журнала транзакций (VLF ). Обратите внимание, что все файлы журнала транзакций объединяются в выходные данные таблицы. Каждая строка в выходных данных представляет VLF в журнале транзакций и предоставляет сведения, относящиеся к этому VLF в журнале.
Синтаксис
sys.dm_db_log_info ( database_id )
Аргументы
database_id | NULL | ПО УМОЛЧАНИЮ
Идентификатор базы данных. database_id имеет значение int. Допустимые входные данные — это идентификатор базы данных, NULL или DEFAULT. По умолчанию имеет значение NULL. NULL и DEFAULT — это эквивалентные значения в контексте текущей базы данных.
Укажите ЗНАЧЕНИЕ NULL для возврата сведений О VLF текущей базы данных.
Можно указать встроенную функцию DB_ID . При использовании DB_ID
без указания имени базы данных уровень совместимости текущей базы данных должен иметь значение 90 или больше.
Возвращаемая таблица
Имя столбца | Тип данных | Description |
---|---|---|
database_id | int | Идентификатор базы данных. В База данных SQL Azure значения уникальны в одной базе данных или эластичном пуле, но не в логическом сервере. |
file_id | smallint | Идентификатор файла журнала транзакций. |
vlf_begin_offset | bigint | Расположение смещения файла виртуального журнала (VLF) с начала файла журнала транзакций. |
vlf_size_mb | float | Размер файла виртуального журнала (VLF) в МБ округляется до двух десятичных разрядов. |
vlf_sequence_number | bigint | Номер последовательности виртуального журнала (VLF) в созданном порядке. Используется для уникальной идентификации VLFs в файле журнала. |
vlf_active | bit | Указывает, используется ли виртуальный файл журнала (VLF). 0 — VLF не используется. 1 — VLF активен. |
vlf_status | int | Состояние файла виртуального журнала (VLF). Возможные значения: 0 — VLF неактивен 1 . VLF инициализирован, но неиспользуется 2 — VLF активен. |
vlf_parity | tinyint | Четность файла виртуального журнала (VLF). Используется внутренне для определения конца журнала в VLF. |
vlf_first_lsn | nvarchar(48) | Номер последовательности журнала (LSN) первой записи журнала в файле виртуального журнала (VLF). |
vlf_create_lsn | nvarchar(48) | Номер последовательности журнала (LSN) записи журнала, создавшей файл виртуального журнала (VLF). |
vlf_encryptor_thumbprint | varbinary(20) |
применимо к: SQL Server 2019 (15.x) и более поздних версий Отображает отпечаток шифратора VLF, если VLF шифруется с помощью прозрачное шифрование данных, в противном случае NULL . |
Замечания
Функция sys.dm_db_log_info
динамического управления заменяет инструкцию DBCC LOGINFO
.
Формула создания VLF на основе события роста подробно описана в руководстве по архитектуре журнала транзакций и управлению SQL Server. Эта формула немного изменилась, начиная с SQL Server 2022 (16.x).
Разрешения
Требуется VIEW SERVER STATE
разрешение в базе данных.
Разрешения для SQL Server 2022 и более поздних версий
Требуется разрешение VIEW DATABASE PERFORMANCE STATE для базы данных.
Примеры
А. Определение баз данных в экземпляре SQL Server с большим количеством VLFs
Следующий запрос определяет базы данных с более чем 100 VLFS в файлах журнала, которые могут повлиять на время запуска, восстановления и восстановления базы данных.
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. Определите позицию последнего VLF
в журнале транзакций перед сжатием файла журнала
Следующий запрос можно использовать для определения позиции последнего активного VLF перед запуском SHRINK FILE в журнале транзакций, чтобы определить, может ли сжаться журнал транзакций.
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