Sdílet prostřednictvím


MSSQLSERVER_9017

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:

  1. 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.

  2. Snižte transakční protokol pomocí DBCC SHRINKDB/DBCC SHRINKFILE aplikace SQL Server Management Studio nebo pomocí aplikace SQL Server Management Studio.

  3. 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.

  4. FILEGROWTH Zvyš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.

  5. 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.