Share via


MSSQLSERVER_9017

Van toepassing op:SQL Server

Bijzonderheden

Attribute Waarde
Productnaam SQL Server
Gebeurtenis-id 9017
Bron van gebeurtenis MSSQLSERVER
Onderdeel SQLEngine
Symbolische naam LOG_MANY_VLFS
Berichttekst Database-%ls heeft meer dan %d virtuele logboekbestanden die te veel zijn. Te veel virtuele logboekbestanden kunnen lange opstart- en back-uptijden veroorzaken. Overweeg het logboek te verkleinen en een andere groeitoename te gebruiken om het aantal virtuele logboekbestanden te verminderen.

Explanation

Tijdens het opstarten van een database detecteert SQL Server dat een database een groot aantal virtuele logboekbestanden (VLF's) heeft en registreert dit foutbericht. De situaties waarin u de fout kunt tegenkomen, zijn:

  • Wanneer u een exemplaar van SQL Server start
  • Een database herstellen
  • Een database koppelen

Het informatiebericht 9017 dat vergelijkbaar is met dit voorbeeld, wordt vastgelegd in het SQL Server-foutenlogboek:

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.

Als u bovendien replicatie-, databasespiegeling- of AlwaysOn-technologieën in uw omgeving gebruikt, merkt u mogelijk prestatieproblemen met deze technologieën.

Het effect van veel VLF's op replicatie

Te veel logboekbestanden kunnen van invloed zijn op replicatie omdat het logboeklezerproces elk virtueel logboekbestand moet scannen op transacties die zijn gemarkeerd voor replicatie. U kunt dit gedrag zien door de prestaties van de sp_replcmds opgeslagen procedure te traceren. Het logboeklezerproces maakt gebruik van de sp_replcmds opgeslagen procedure om de virtuele logboekbestanden te scannen en de transacties te lezen die zijn gemarkeerd voor replicatie.

Oorzaak

Dit probleem treedt op wanneer u kleine waarden opgeeft voor de FILEGROWTH parameter voor uw transactielogboekbestand(en).

De SQL Server Database Engine verdeelt elk fysiek logboekbestand intern in verschillende virtuele logboekbestanden (VLF's). SQL Server 2008 R2 Service Pack 2 heeft een nieuw bericht (9017) geïntroduceerd dat wordt geregistreerd wanneer een database wordt gestart (vanwege het starten van een exemplaar van SQL Server of vanwege het koppelen of herstellen van de database) en meer dan 10.000 VLFS in SQL Server 2008 R2 of meer dan 10.000 VLFS heeft in SQL Server 2012 en latere versies.

Opmerking

In SQL Server 2012, hoewel dit bericht wordt geregistreerd wanneer de database 10.000 VLF's heeft, geeft het werkelijke bericht dat wordt gerapporteerd in het foutenlogboek onjuist de status '1000 VLF'. De waarschuwing treedt op na 10.000 VLF's. Het bericht rapporteert echter 1000 VLF's. Dit probleem wordt opgelost in latere versies.

Gebruikersactie

Volg deze stappen om dit probleem op te lossen:

  1. U kunt het aantal VLF's en de gemiddelde grootte van uw SQL Server bekijken met behulp van deze query. Het resultaat helpt u bij het identificeren van de databases waarop u zich wilt richten:

    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;
    

    Zie sys.dm_db_log_info voor meer informatie.

  2. Verminder uw transactielogboek met behulp van DBCC SHRINKDB/DBCC SHRINKFILE of met behulp van SQL Server Management Studio.

  3. Voer een eenmalige toename van de grootte van het transactielogboekbestand uit naar een grote waarde. Deze eenmalige toename wordt uitgevoerd om regelmatige automatische groei te voorkomen. Zie De grootte van het transactielogboekbestand beheren voor meer informatie.

  4. Verhoog de FILEGROWTH parameter naar een grotere waarde dan wat momenteel is geconfigureerd. Dit moet zijn gebaseerd op de activiteit van uw database en hoe vaak uw logboekbestand groeit.

  5. Daarnaast kunt u de volgende artikelen met oplossingen bekijken, afhankelijk van de versie van SQL Server die u momenteel uitvoert:

Aanbeveling

Als u de optimale VLF-distributie wilt bepalen voor de huidige transactielogboekgrootte van alle databases in een bepaald exemplaar en de vereiste groeiverhogingen om de vereiste grootte te bereiken, raadpleegt u dit script.