Megosztás a következőn keresztül:


sys.dm_db_log_info (Transact-SQL)

A következőkre vonatkozik: SQL Server 2016 (13.x) SP 2 és újabb Azure SQL Database Felügyelt Azure SQL-példány

A tranzakciónapló virtuális naplófájljának (VLF) adatait adja vissza. Vegye figyelembe, hogy a tranzakciónapló-fájlok összesítése a tábla kimenetében van. A kimenet minden sora egy VLF-et jelöl a tranzakciónaplóban, és a naplóban az adott VLF-hez kapcsolódó információkat nyújt.

Szintaxis

sys.dm_db_log_info ( database_id )

Érvek

database_id | NULL | ALAPÉRTELMEZETT

Az adatbázis azonosítója. database_id egy int. Az érvényes bemenetek az adatbázis azonosítószáma, NULL vagy ALAPÉRTELMEZETT. Az alapértelmezett érték NULL. A NULL és a DEFAULT egyenértékű értékek az aktuális adatbázis kontextusában.

Adja meg a NULL értéket az aktuális adatbázis VLF-adatainak visszaadásához.

Megadhatja a beépített DB_ID függvényt. Ha a DB_ID adatbázisnév megadása nélkül használja, az aktuális adatbázis kompatibilitási szintjének 90-es vagy annál nagyobbnak kell lennie.

Visszajuttatott tábla

Oszlop neve Adattípus Leírás
adatbázis_azonosító int Adatbázis-azonosító.

Az Azure SQL Database-ben az értékek egyediek egyetlen adatbázisban vagy rugalmas készletben, de nem logikai kiszolgálón belül.
fájl_azonosító smallint A tranzakciónapló fájlazonosítója.
vlf_begin_offset bigint A virtuális naplófájl (VLF) helye eltolása a tranzakciónapló-fájl elejétől.
vlf_size_mb lebegőpontos virtuális naplófájl (VLF) mérete MB-ban, két tizedesjegyre kerekítve.
vlf_sorszám bigint virtuális naplófájl (VLF) sorszámot a létrehozott sorrendben. A naplófájl vLF-jeinek egyedi azonosítására szolgál.
vlf_active bit Azt jelzi, hogy virtuális naplófájl (VLF) használatban van-e.
0 – A VLF nincs használatban.
1 – A VLF aktív.
vlf_status A virtuális naplófájl (VLF)állapota. Lehetséges értékek:
0 – A VLF inaktív
1 – A VLF inicializálva van, de nem használt
2 – A VLF aktív.
vlf_parity kis egész szám A virtuális naplófájl (VLF)paritása. Belsőleg használható a napló végének meghatározásához egy VLF-ben.
vlf_first_lsn nvarchar(48) virtuális naplófájl (VLF)első naplórekordjának (LSN).
vlf_create_lsn nvarchar(48) virtuális naplófájlt (VLF) létrehozó naplórekord naplóütemezési száma (LSN).
vlf_encryptor_thumbprint (VLF titkosító ujjlenyomat) varbinary(20) A következőkre vonatkozik: SQL Server 2019 (15.x) és újabb verziók

Megjeleníti a VLF titkosítójának ujjlenyomatát, ha a VLF Transzparens adattitkosításihasználatával van titkosítva, ellenkező esetben NULL.

Megjegyzések

A sys.dm_db_log_info dinamikus felügyeleti függvény felváltja a DBCC LOGINFO utasítást.

Az SQL Server tranzakciónapló architektúrája és kezelési útmutatórészletesen ismerteti, hogy mi az a képlet, amely alapján a növekedési esemény során hány VLF jön létre. Ez a képlet kissé megváltozott az SQL Server 2022-től kezdve (16.x).

Engedélyek

Az adatbázis VIEW SERVER STATE engedélyére van szükség.

Engedélyek az SQL Server 2022-hez és újabb verziókhoz

Az adatbázishoz a VIEW DATABASE PERFORMANCE STATE engedélyre van szükség.

Példák

Egy. Adatbázisok meghatározása nagy számú VLF-et tartalmazó SQL Server-példányban

Az alábbi lekérdezés meghatározza a naplófájlokban több mint 100 virtuális merevlemezt tartalmazó adatbázisokat, amelyek hatással lehetnek az adatbázis indítási, visszaállítási és helyreállítási idejére.

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. A tranzakciónapló utolsó VLF pozíciójának meghatározása a naplófájl zsugorítása előtt

Az alábbi lekérdezés az utolsó aktív VLF pozíciójának meghatározására használható, mielőtt a SHRINK FILE fájlt futtatta volna a tranzakciónaplóban annak megállapításához, hogy a tranzakciónapló zsugorodhat-e.

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