Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för: SQL Server 2016 (13.x) SP 2 och senare
Azure SQL Database
Azure SQL Managed Instance
Returnerar information om den virtuella loggfilen (VLF) i transaktionsloggen. Observera att alla transaktionsloggfiler kombineras i tabellutdata. Varje rad i utdata representerar en VLF i transaktionsloggen och innehåller information som är relevant för den VLF:en i loggen.
Syntax
sys.dm_db_log_info ( database_id )
Argument
database_id | NULL | DEFAULT
Är databasens ID. database_id är int. Giltiga indata är ID-numret för en databas, NULL eller DEFAULT. Standardvärdet är NULL. NULL och DEFAULT är motsvarande värden i kontexten för den aktuella databasen.
Ange NULL för att returnera VLF-information för den aktuella databasen.
Den inbyggda funktionen DB_ID kan anges. När du använder DB_ID
utan att ange ett databasnamn måste kompatibilitetsnivån för den aktuella databasen vara 90 eller högre.
Tabell returnerad
Kolumnnamn | Datatyp | Beskrivning |
---|---|---|
database_id | int | Databas-ID. I Azure SQL Database är värdena unika i en enskild databas eller en elastisk pool, men inte inom en logisk server. |
file_id | smallint | Fil-ID för transaktionsloggen. |
vlf_begin_offset | bigint | Förskjutning av den virtuella loggfilen (VLF) från början av transaktionsloggfilen. |
vlf_size_mb | flyttal | virtuell loggfil (VLF) storlek i MB, avrundad till två decimaler. |
vlf_sekvensnummer | bigint | virtuell loggfil (VLF) sekvensnummer i den skapade ordningen. Används för att unikt identifiera VLF:er i loggfilen. |
vlf_aktiv | bit | Anger om virtuella loggfilen (VLF) används eller inte. 0 – VLF används inte. 1 – VLF är aktivt. |
vlf_status | int | Status för den virtuella loggfilen (VLF). Möjliga värden är 0 – VLF är inaktivt 1 – VLF initieras men används inte 2 – VLF är aktivt. |
vlf_parity | tinyint | Paritet för virtuell loggfil (VLF). Används internt för att fastställa slutet av loggen i en VLF. |
vlf_first_lsn | nvarchar(48) | loggsekvensnummer (LSN) för den första loggposten i virtuella loggfilen (VLF). |
vlf_create_lsn | nvarchar(48) | loggsekvensnummer (LSN) för loggposten som skapade virtuella loggfilen (VLF). |
vlf_encryptor_thumbprint | varbinary(20) |
gäller för: SQL Server 2019 (15.x) och senare Visar tumavtrycket för krypteraren för VLF om VLF krypteras med transparent datakryptering, annars NULL . |
Anmärkningar
Funktionen sys.dm_db_log_info
dynamisk hantering ersätter DBCC LOGINFO
-instruktionen.
Formeln för hur många VLF:er som skapas baserat på en tillväxthändelse beskrivs i SQL Server Transaction Log Architecture and Management Guide. Den här formeln ändrades något med början i SQL Server 2022 (16.x).
Behörigheter
Kräver VIEW SERVER STATE
behörighet i databasen.
Behörigheter för SQL Server 2022 och senare
Kräver behörigheten VISA DATABASPRESTANDATILLSTÅND för databasen.
Exempel
A. Fastställa databaser i en SQL Server-instans med ett stort antal VLF:er
Följande fråga avgör databaserna med fler än 100 VLFs i loggfilerna, vilket kan påverka databasens start-, återställnings- och återställningstid.
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. Bestämma positionen för den sista VLF
i transaktionsloggen innan du krymper loggfilen
Följande fråga kan användas för att fastställa positionen för den senaste aktiva VLF:en innan du kör SHRINK FILE i transaktionsloggen för att avgöra om transaktionsloggen kan krympa.
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