MSSQLSERVER_9017

Gilt für:SQL Server

Details

attribute Wert
Produktname SQL Server
Ereignis-ID 9017
Ereignisquelle MSSQLSERVER
Komponente SQLEngine
Symbolischer Name LOG_MANY_VLFS
Meldungstext Die %ls-Datenbank verfügt über mehr als %d virtuelle Protokolldateien, was übermäßig ist. Zu viele virtuelle Protokolldateien können zu langen Start- und Sicherungszeiten führen. Erwägen Sie, das Protokoll zu verkleinern und ein anderes Inkrement zu verwenden, um die Anzahl der virtuellen Protokolldateien zu reduzieren.

Erklärung

Während eines Datenbankstarts erkennt SQL Server, dass eine Datenbank über eine große Anzahl von virtuellen Protokolldateien (VLFs) verfügt, und protokolliert diese Fehlermeldung. Der Fehler kann in folgenden Situationen auftreten:

  • Wenn Sie eine Instanz von SQL Server
  • Wiederherstellen einer Datenbank
  • Anfügen einer Datenbank

Die 9017-Informationsmeldung, die diesem Beispiel ähnelt, wird im SQL Server-Fehlerprotokoll protokolliert:

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.

Wenn Sie in Ihrer Umgebung Replikations-, Datenbankspiegelungs- oder AlwaysOn-Technologien verwenden, können Außerdem Leistungsprobleme mit diesen Technologien auftreten.

Auswirkungen vieler VLFs auf die Replikation

Zu viele Protokolldateien können sich auf die Replikation auswirken, da der Protokollleseprozess jede virtuelle Protokolldatei auf Transaktionen überprüfen muss, die für die Replikation markiert sind. Sie können dieses Verhalten erkennen, indem Sie die Leistung der gespeicherten Prozedur sp_replcmds nachverfolgen. Der Protokollleseprozess verwendet die gespeicherte sp_replcmds Prozedur, um die virtuellen Protokolldateien zu überprüfen und die Transaktionen zu lesen, die für die Replikation markiert sind.

Ursache

Dieses Problem tritt auf, wenn Sie kleine Werte für den FILEGROWTH-Parameter für Ihre Transaktionsprotokolldateien angeben.

Die SQL Server-Datenbank-Engine unterteilt jede physische Protokolldatei intern in mehrere virtuelle Protokolldateien (VLFs). SQL Server 2008 R2 Service Pack 2 wurde eine neue Meldung (9017) eingeführt, die protokolliert wird, wenn eine Datenbank gestartet wird (entweder aufgrund des Starts einer Instanz von SQL Server oder aufgrund des Anfügens oder Wiederherstellens der Datenbank und verfügt über mehr als 1.000 VLFs in SQL Server 2008 R2 oder über mehr als 10.000 VLFS in SQL Server 2012 und höheren Versionen.

Hinweis

In SQL Server 2012 wird diese Meldung zwar protokolliert, wenn die Datenbank über 10.000 VLFs verfügt, die tatsächliche Meldung, die im Fehlerprotokoll gemeldet wird, fälschlicherweise "1000 VLF" lautet. Die Warnung tritt nach 10.000 VLFs auf. Die Meldung meldet jedoch 1.000 VLFs. Dieses Problem wird in späteren Versionen behoben.

Benutzeraktion

Gehen Sie folgendermaßen vor, um dieses Problem zu beheben:

  1. Mithilfe dieser Abfrage können Sie die VLF-Anzahl und die durchschnittliche Größe Ihres SQL Server anzeigen. Anhand des Ergebnisses können Sie ermitteln, auf welche Datenbanken Sie sich konzentrieren müssen:

    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 db
     CROSS APPLY sys.dm_db_log_info(db.database_id) dbl
    GROUP BY db.name
    ORDER BY Total_VLF_count DESC
    

    Weitere Informationen finden Sie unter sys.dm_db_log_info.

  2. Reduzieren Sie Ihr Transaktionsprotokoll mithilfe von DBCC SHRINKDB/DBCC SHRINKFILE oder mit SQL Server Management Studio.

  3. Führen Sie eine einmalige Erhöhung der Größe der Transaktionsprotokolldatei auf einen großen Wert aus. Diese einmalige Erhöhung erfolgt, um häufige automatische Vergrößerungen zu vermeiden. Weitere Informationen finden Sie unter Verwalten der Größe der Transaktionsprotokolldatei.

  4. Erhöhen Sie den FILEGROWTH-Parameter auf einen höheren Wert als den derzeit konfigurierten Wert. Dies sollte auf der Aktivität Ihrer Datenbank basieren und wie häufig Ihre Protokolldatei wächst.

  5. Darüber hinaus können Sie die folgenden Korrekturartikel lesen, abhängig von der Version von SQL Server, die Sie derzeit ausführen:

    KORREKTUR: Die Wiederherstellung einer Datenbank in SQL Server 2008 R2, SQL Server 2008 oder SQL Server 2012 dauert lange.

    KORREKTUR: Langsame Leistung beim Wiederherstellen einer Datenbank, wenn sich im Transaktionsprotokoll SQL Server 2005, SQL Server 2008 oder SQL Server 2008 R2 viele VLFs befinden

    KORREKTUR: Die Wiederherstellung dauert länger als erwartet für eine Datenbank in einer SQL Server 2008- oder SQL Server 2008 R2-Umgebung

Tipp

Informationen darüber, wie Sie die optimale VLF-Verteilung für die aktuelle Größe des Transaktionsprotokolls aller Datenbanken in einer bestimmten Instanz sowie die benötigten Wachstumsinkremente zum Erreichen der erforderlichen Größe ermitteln, finden Sie in diesem Skript.