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
Související obsah
- 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)