Freigeben über


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 Datenbank %ls verfügt über mehr als %d virtuelle Protokolldateien, die übermäßig hoch sind. Zu viele virtuelle Protokolldateien können zu langen Start- und Sicherungszeiten führen. Erwägen Sie, das Protokoll zu verkleinern und einen anderen Wachstumsschritt zu verwenden, um die Anzahl der virtuellen Protokolldateien zu verringern.

Erklärung

Während eines Datenbankstarts erkennt SQL Server, dass eine Datenbank über eine große Anzahl virtueller Protokolldateien (VLFs) verfügt, und protokolliert diese Fehlermeldung. Die Situationen, in denen der Fehler auftreten kann, sind:

  • Wenn Sie eine Instanz von SQL Server starten
  • 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 die Technologien Replikation, Datenbankspiegelung oder AlwaysOn in Ihrer Umgebung verwenden, stellen Sie möglicherweise Leistungsprobleme mit diesen Technologien fest.

Die Auswirkung vieler VLFs auf die Replikation

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

Ursache

Dieses Problem tritt auf, wenn Sie kleine Werte für den FILEGROWTH-Parameter für Ihre Transaktionsprotokolldatei(n) angeben.

Die SQL Server-Datenbank-Engine unterteilt intern jede physische Protokolldatei in mehrere virtuelle Protokolldateien (VLFs). SQL Server 2008 R2 Service Pack 2 hat eine neue Nachricht (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 mehr als 1.000 VLFs in SQL Server 2008 R2 oder mehr als 10.000 VLFS in SQL Server 2012 und höher.

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". Die Warnung tritt nach 10.000 VLFs auf. Die Meldung meldet jedoch 1.000 VLFs. Dieses Problem wird in späteren Versionen behoben.

Aktion des Benutzers

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

  1. Sie können die VLF-Anzahl und die durchschnittliche Größe auf Ihrem SQL Server mithilfe dieser Abfrage anzeigen. Das Ergebnis hilft Ihnen, zu identifizieren, auf welche Datenbanken sie sich konzentrieren sollen:

    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 mithilfe von 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 Zuwächse zu vermeiden. Weitere Informationen finden Sie unter Verwalten der Größe der Transaktionsprotokolldatei.

  4. Erhöhen Sie den FILEGROWTH-Parameter auf einen größeren Wert als die derzeit konfigurierten. 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 Fixartikel überprüfen, je nachdem, welche Version von SQL Server Sie derzeit ausführen:

    FIX: Es dauert lange, eine Datenbank in SQL Server 2008 R2, SQL Server 2008 oder SQL Server 2012 wiederherzustellen.

    FIX: Langsame Leistung beim Wiederherstellen einer Datenbank, wenn viele VLFs im Transaktionsprotokoll in SQL Server 2005, SQL Server 2008 oder SQL Server 2008 R2 vorhanden sind

    FIX: 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.