Sdílet prostřednictvím


sys.dm_db_log_info (Transact-SQL)

platí pro: SQL Server 2016 (13.x) SP 2 a novější Azure SQL Database Azure SQL Managed Instance

Vrátí informace o virtuálním logovém souboru (VLF) transakčního protokolu. Všimněte si, že všechny soubory transakčního protokolu jsou sloučeny ve výstupu tabulky. Každý řádek ve výstupu představuje VLF v transakčním protokolu a poskytuje informace relevantní pro tento VLF v protokolu.

Syntax

sys.dm_db_log_info ( database_id )

Argumenty

database_id | NULL | VÝCHOZÍ

Je ID databáze. database_id je typ int. Platné vstupy jsou číslo ID databáze, hodnota NULL, nebo hodnota DEFAULT. Výchozí hodnota je NULL. HODNOTY NULL a DEFAULT jsou ekvivalentními hodnotami v kontextu aktuální databáze.

Chcete-li vrátit informace VLF aktuální databáze, zadejte hodnotu NULL.

Lze zadat předdefinovanou funkci DB_ID. Při použití DB_ID bez zadání názvu databáze musí být úroveň kompatibility aktuální databáze 90 nebo vyšší.

Vrácená tabulka

Název sloupce Datový typ Popis
database_id int ID databáze.

Ve službě Azure SQL Database jsou hodnoty jedinečné v rámci jedné databáze nebo elastického fondu, ale ne v rámci logického serveru.
file_id malé celé číslo ID souboru transakčního protokolu.
vlf_begin_offset bigint Odsazení umístění souboru virtuálního protokolu (VLF) od začátku souboru transakčního protokolu.
velikost_VLF_MB plovoucí velikost souboru virtuálního protokolu (VLF) v MB, zaokrouhlená na dvě desetinná místa.
číslo_sekvence_vlf bigint soubor virtuálního protokolu (VLF) pořadové číslo v vytvořeném pořadí. Slouží k jednoznačné identifikaci VLFů v protokolovém souboru.
vlf_active bit Určuje, zda je virtuální soubor protokolu (VLF) používán, nebo ne.
0 – VLF se nepoužívá.
1 – VLF je aktivní.
vlf_status int Stav souboru virtuálního protokolu (VLF) . Možné hodnoty zahrnují:
0 – VLF je neaktivní
1. Inicializuje se VLF, ale nepoužívá se
2 – VLF je aktivní.
vlf_parity tinyint Parita souboru virtuálního protokolu (VLF). Používá se interně k určení konce protokolu v rámci VLF.
vlf_first_lsn nvarchar(48) Sekvenční číslo protokolu (LSN) prvního záznamu protokolu ve virtuálním souboru protokolu (VLF).
vlf_create_lsn nvarchar(48) pořadové číslo protokolu (LSN) záznamu protokolu, který vytvořil virtuální soubor protokolu (VLF).
vlf_šifrovač_otisk varbinary(20) platí pro: SQL Server 2019 (15.x) a novější

Zobrazuje otisk palce zašifrovače VLF, pokud je VLF šifrovaný pomocí Transparent Data Encryption, jinak NULL.

Poznámky

Funkce sys.dm_db_log_info dynamické správy nahrazuje příkaz DBCC LOGINFO.

Vzorec pro to, kolik souborů VLF se vytváří na základě události růstu, je podrobně popsáno v architektuře a správě transakčních protokolů SQL Serveru. Tento vzorec se mírně změnil od SQL Serveru 2022 (16.x).

Dovolení

Vyžaduje oprávnění VIEW SERVER STATE v databázi.

Oprávnění pro SQL Server 2022 a novější

Vyžaduje oprávnění ZOBRAZIT STAV VÝKONU DATABÁZE pro databázi.

Příklady

A. Určení databází v instanci SQL Serveru s vysokým počtem VLF

Následující dotaz určuje databáze s více než 100 VLF v souborech protokolů, které můžou ovlivnit dobu spuštění, obnovení a obnovení databáze.

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. Určete pozici posledního VLF v transakčním protokolu před zmenšením souboru protokolu.

Následující dotaz lze použít k určení pozice posledního aktivního VLF (Virtuální protokolový soubor) před během SHRINK FILE v protokolu transakcí, abyste mohli zjistit, zda se protokol transakcí může zmenšit.

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
  • zobrazení a funkce dynamické správy (Transact-SQL)
  • Zobrazení dynamické správy související s databází (Transact-SQL)
  • sys.dm_db_log_space_usage (Transact-SQL)
  • sys.dm_db_log_stats (Transact-SQL)