sys.dm_db_log_info (Transact-SQL)
Dotyczy: SQL Server 2016 (13.x) SP 2 lub nowszym Azure SQL Database Azure SQL Managed Instance
Zwraca informacje o wirtualnym pliku dziennika (VLF) w dzienniku transakcji. Zwróć uwagę, że wszystkie pliki dziennika transakcji są łączone w danych wyjściowych tabeli. Każdy wiersz w danych wyjściowych reprezentuje VLF w dzienniku transakcji i zawiera informacje istotne dla tego VLF w dzienniku.
Składnia
sys.dm_db_log_info ( database_id )
Argumenty
database_id | NULL | DOMYŚLNY
Jest identyfikatorem bazy danych. database_id jest typu int. Prawidłowe dane wejściowe to numer identyfikacyjny bazy danych, NULL lub DEFAULT. Wartość domyślna to NULL. Wartości NULL i DEFAULT są równoważne wartościom w kontekście bieżącej bazy danych.
Określ wartość NULL, aby zwrócić informacje o VLF bieżącej bazy danych.
Można określić wbudowaną funkcję DB_ID. W przypadku używania DB_ID
bez określania nazwy bazy danych poziom zgodności bieżącej bazy danych musi mieć wartość 90 lub większą.
Zwracana tabela
Nazwa kolumny | Typ danych | Opis |
---|---|---|
identyfikator_bazy_danych | int | Identyfikator bazy danych. W usłudze Azure SQL Database wartości są unikatowe w ramach pojedynczej bazy danych lub elastycznej puli, ale nie w obrębie serwera logicznego. |
identyfikator_pliku | smallint | Identyfikator pliku dziennika transakcji. |
vlf_begin_offset | bigint | Położenie przesunięcia pliku dziennika wirtualnego (VLF) od początku pliku dziennika transakcji. |
vlf_size_mb | zmiennoprzecinkowa | rozmiar pliku dziennika wirtualnego (VLF) w MB, zaokrąglony do dwóch miejsc dziesiętnych. |
vlf_sequence_number | bigint | pliku dziennika wirtualnego (VLF) numer sekwencji w utworzonej kolejności. Służy do unikatowego identyfikowania plików VLF w pliku dziennika. |
vlf_active | bitów | Wskazuje, czy plik dziennika wirtualnego (VLF) jest używany, czy nie. 0 — VLF nie jest używany. 1 — VLF jest aktywny. |
vlf_status | typ całkowity | Stan pliku dziennika wirtualnego (VLF). Możliwe wartości obejmują 0 — VLF jest nieaktywny 1 — VLF jest inicjowany, ale nieużywany 2 — VLF jest aktywny. |
vlf_parity | tinyint | Parzystość pliku dziennika wirtualnego (VLF). Używany wewnętrznie do określania końca wpisu dziennika wewnątrz Virtual Log File (VLF). |
vlf_first_lsn | nvarchar(48) | numer sekwencji logu (LSN) pierwszego rekordu logu w pliku logu wirtualnego (VLF). |
vlf_create_lsn | nvarchar(48) | numer sekwencji dziennika (LSN) rekordu dziennikowego, który utworzył wirtualny plik dziennika (VLF). |
vlf_encryptor_thumbprint | varbinary(20) |
Dotyczy: SQL Server 2019 (15.x) i nowszych wersji Pokazuje odcisk palca szyfratora VLF, jeśli VLF jest zaszyfrowany przy użyciu Transparent Data Encryption, w przeciwnym razie NULL . |
Uwagi
Funkcja dynamicznego zarządzania sys.dm_db_log_info
zastępuje instrukcję DBCC LOGINFO
.
Formuła liczby plików VLF tworzonych na podstawie zdarzenia wzrostu jest szczegółowo opisana w Architektura dziennika transakcji programu SQL Server i przewodnik zarządzania. Ta formuła nieco zmieniła się w programie SQL Server 2022 (16.x).
Uprawnienia
Wymaga uprawnienia VIEW SERVER STATE
w bazie danych.
Uprawnienia dla programu SQL Server 2022 i nowszych
Wymaga uprawnienia WYŚWIETL STAN WYDAJNOŚCI BAZY DANYCH dla bazy danych.
Przykłady
A. Określanie baz danych w wystąpieniu programu SQL Server z dużą liczbą plików VLF
Poniższe zapytanie określa bazy danych z ponad 100 VLF w plikach dziennika, co może mieć wpływ na czas uruchamiania, przywracania oraz odzyskiwania bazy danych.
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. Określ położenie ostatniego VLF
w dzienniku transakcji przed zmniejszeniem pliku dziennika
Poniższe zapytanie może służyć do określenia położenia ostatniego aktywnego wirtualnego dziennika transakcji przed uruchomieniem polecenia SHRINK FILE w dzienniku transakcji w celu określenia, czy można zmniejszyć dziennik transakcji.
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
Powiązana zawartość
- dynamiczne widoki zarządzania i funkcje (Transact-SQL)
- Widoki dynamicznego zarządzania związane z bazą danych (Transact-SQL)
- sys.dm_db_log_space_usage (Transact-SQL)
- sys.dm_db_log_stats (Transact-SQL)