Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Podrobnosti
| Vlastnost | Hodnota |
|---|---|
| Název produktu | SQL Server |
| ID události | 9017 |
| Zdroj událostí | MSSQLSERVER |
| Součást | SQLEngine |
| Symbolický název | LOG_MANY_VLFS |
| Text zprávy | Databázová %ls má více než %d virtuálních protokolových souborů, což je příliš mnoho. Příliš mnoho souborů virtuálních protokolů může způsobit dlouhou dobu spuštění a zálohování. Zvažte zmenšení protokolu a použití jiného růstového přírůstku, abyste snížili počet virtuálních protokolových souborů. |
Explanation
Při spuštění databáze SQL Server zjistí, že databáze obsahuje velký počet souborů virtuálních protokolů (VLF) a zaznamená tuto chybovou zprávu. Mezi situace, kdy se můžete setkat s chybou, patří:
- Při spuštění instance SQL Serveru
- Obnovení databáze
- Připojení databáze
Informační zpráva 9017 podobná tomuto příkladu je zaznamenána v protokolu chyb SQL Serveru:
Database dbName has more than n virtual log files which is excessive. Too many virtual log files can cause long startup and backup times. Consider shrinking the log and using a different growth increment to reduce the number of virtual log files. Too many virtual log files can adversely affect the recovery time of the database.
Kromě toho, pokud ve svém prostředí používáte technologie Replikace, Zrcadlení databáze nebo AlwaysOn, můžete si všimnout problémů s výkonem těchto technologií.
Účinek mnoha VLF na replikaci
Příliš mnoho souborů protokolu může mít vliv na replikaci, protože proces čtečky protokolů musí zkontrolovat všechny soubory virtuálního protokolu transakce, které jsou označené pro replikaci. Toto chování můžete zobrazit trasováním výkonu sp_replcmds uložené procedury. Proces čtečky protokolů používá uloženou proceduru sp_replcmds ke kontrole souborů virtuálních protokolů a ke čtení transakcí, které jsou označené pro replikaci.
Příčina
K tomuto problému dochází, když zadáte malé hodnoty parametru FILEGROWTH pro soubory transakčního protokolu.
Databázový stroj SQL Serveru interně rozdělí každý fyzický soubor protokolu do několika virtuálních souborů protokolu (VLFs). SQL Server 2008 R2 Service Pack 2 zavedl novou zprávu (9017), která je zaznamenána při spuštění databáze (buď kvůli spuštění instance SQL Serveru nebo kvůli připojení nebo obnovení databáze) a má více než 1 000 VLF v SQL Serveru 2008 R2 nebo má více než 10 000 VLFS v SQL Serveru 2012 a novějších verzích.
Poznámka:
V SYSTÉMU SQL Server 2012 se tato zpráva zaprotokoluje, pokud databáze obsahuje 10 000 VLF, skutečná zpráva, která je hlášena v protokolu chyb nesprávně uvádí "1000 VLF". K upozornění dochází po 10 000 VLF. Zpráva však hlásí 1 000 VLF. Tento problém je opravený v pozdějších verzích.
Akce uživatele
Chcete-li tento problém vyřešit, postupujte takto:
Pomocí tohoto dotazu můžete zobrazit počet VLF a průměrnou velikost sql Serveru. Výsledek vám pomůže určit, na které databáze se zaměřit:
SELECT db.name, count(dbl.database_id) AS Total_VLF_count, CONVERT (DECIMAL (10, 2), avg(dbl.vlf_size_mb)) AS Avg_VLF_Size_MB FROM sys.databases AS db CROSS APPLY sys.dm_db_log_info(db.database_id) AS dbl GROUP BY db.name ORDER BY Total_VLF_count DESC;Další informace najdete v tématu sys.dm_db_log_info.
Snižte transakční protokol pomocí
DBCC SHRINKDB/DBCC SHRINKFILEaplikace SQL Server Management Studio nebo pomocí aplikace SQL Server Management Studio.Jednorázově zvětšete velikost souboru transakčního protokolu na velkou hodnotu. Tento jednorázový nárůst se provádí, aby nedocházelo k častým automatickým růstům. Další informace naleznete v tématu Správa velikosti souboru transakčního protokolu.
FILEGROWTHZvyšte parametr na větší hodnotu, než je aktuálně nakonfigurované. Mělo by to být založené na aktivitě databáze a na tom, jak často se soubor protokolu zvětšuje.Kromě toho si můžete projít následující články o opravách v závislosti na verzi SQL Serveru, kterou právě používáte:
Návod
Chcete-li určit optimální distribuci VLF pro aktuální velikost transakčního protokolu všech databází v dané instanci a požadovaný růst přírůstků k dosažení požadované velikosti, přečtěte si tento skript.