Verkleinern des Transaktionsprotokolls

Wenn Sie wissen, dass eine Transaktionsdatei nicht verwendeten Speicherplatz enthält, den Sie nicht benötigen, können Sie den überschüssigen Speicherplatz freigeben, indem Sie die Größe des Transaktionsprotokolls verringern. Dieser Prozess wird als Verkleinern der Protokolldatei bezeichnet.

Das Verkleinern kann nur ausgeführt werden, wenn die Datenbank online ist und wenn außerdem mindestens eine virtuelle Protokolldatei frei ist. In einigen Fällen ist das Verkleinern des Protokolls möglicherweise erst nach der nächsten Protokollkürzung möglich.

HinweisHinweis

Das Abschneiden erfolgt beim einfachen Wiederherstellungsmodell normalerweise automatisch, wenn die Datenbank gesichert ist, und beim vollständigen Wiederherstellungsmodell, wenn das Transaktionsprotokoll gesichert ist. Das Abschneiden kann jedoch durch eine Reihe von Faktoren verzögert werden. Weitere Informationen finden Sie unter Faktoren, die das Abschneiden des Protokolls verzögern können..

So verkleinern Sie eine Protokolldatei (ohne Verkleinern von Datenbankdateien)

So überwachen Sie Protokollverkleinerungsereignisse

To monitor log space

HinweisHinweis

Es kann festgelegt werden, dass das Verkleinern der Datenbank und Protokolldateien automatisch ausgeführt wird. Das automatische Verkleinern wird jedoch nicht empfohlen, und die autoshrink-Datenbankeigenschaft ist standardmäßig auf FALSE festgelegt. Wenn autoshrink auf TRUE festgelegt ist, wird die Größe einer Datei durch das automatische Verkleinern nur verringert, wenn mehr als 25 Prozent ihres Speicherplatzes nicht verwendet werden. Die Datei wird auf eine Größe verkleinert, bei der 25 Prozent der Datei aus nicht verwendetem Speicherplatz bestehen, oder auf die ursprüngliche Größe der Datei, je nachdem, welcher Wert größer ist. Informationen zum Ändern der Einstellung der autoshrink-Eigenschaft finden Sie unter Vorgehensweise: Anzeigen oder Ändern der Eigenschaften einer Datenbank (SQL Server Management Studio) (Verwenden der Auto Shrink-Eigenschaft auf der Seite Optionen) oder unter ALTER DATABASE SET-Optionen (Transact-SQL) (Verwenden der AUTO_SHRINK-Option).

Vorgehensweise beim Verkleinern der Protokolldatei

Beim Verkleinern des Transaktionsprotokolls wird die physische Größe des Protokolls reduziert, indem eine oder mehrere inaktive virtuelle Protokolldateien entfernt werden. Die virtuelle Protokolldatei ist immer die Einheit, die für Verkleinerungen verwendet wird. Falls Sie z. B. über eine Protokolldatei mit einer Größe von 600 MB verfügen, die in sechs virtuelle Protokolle mit je 100 MB aufgeteilt ist, kann die Größe der Protokolldatei nur in Schritten von 100 MB verringert werden. Die Dateigröße kann auf Größen von z. B. 500 MB oder 400 MB verringert werden, die Datei kann jedoch nicht auf Größen von z. B. 433 MB oder 525 MB verkleinert werden. Eine virtuelle Protokolldatei, die aktive Protokolldatensätze enthält, wird als aktive virtuelle Protokolldatei bezeichnet. Diese Datei ist Teil des logischen Protokolls und kann nicht entfernt werden. Weitere Informationen finden Sie unter Physische Architektur des Transaktionsprotokolls.

HinweisHinweis

Die Größe der virtuellen Protokolldatei wird dynamisch von Database Engine (Datenbankmodul) ausgewählt, wenn Protokolldateien erstellt oder erweitert werden. Weitere Informationen finden Sie unter Physische Architektur des Transaktionsprotokolls.

Die aktuelle Größe einer Protokolldatei entspricht der Gesamtgröße der Seiten, die von den virtuellen Protokolldateien verwendet werden. Beachten Sie jedoch, dass die Seiten von den Protokolldateien nicht verwendet werden. Virtuelle Protokolldateien, die einen Teil des logischen Protokolls enthalten, können nicht freigegeben werden. Wenn alle virtuellen Protokolldateien in einer Protokolldatei Teile des logischen Protokolls enthalten, kann die Datei nicht verkleinert werden. Eine Verkleinerung ist erst möglich, nachdem bei Protokollkürzung eine oder mehrere der virtuellen Protokolldateien als inaktiv markiert wurden.

Bei einem Dateiverkleinerungsvorgang können nur inaktive virtuelle Protokolldateien entfernt werden. Wenn keine Zielgröße angegeben ist, werden bei einem Dateiverkleinerungsvorgang nur die inaktiven virtuellen Protokolldateien entfernt, die über die letzte aktive virtuelle Protokolldatei in der Datei hinausgehen. Wird eine Zielgröße angegeben, werden bei einem Dateiverkleinerungsvorgang nur so viele inaktive virtuelle Protokolldateien entfernt, dass die Zielgröße annähernd erreicht, jedoch nicht unterschritten wird. Nach einer Verkleinerung ist die Protokolldatei normalerweise etwas größer als durch die Zielgröße vorgegeben, jedoch nie kleiner. Aufgrund der virtuellen Protokolldateien kann nicht genau vorhergesagt werden, um wie viel die Protokolldatei tatsächlich verkleinert wird.

Wenn eine Datei verkleinert wird, muss der freigegebene Speicherplatz vom Ende der Datei stammen. Wenn eine Transaktionsprotokolldatei verkleinert wird, werden ausreichend viele virtuelle Protokolldateien vom Ende der Protokolldatei freigegeben, um das Protokoll auf die Größe zu verkleinern, die vom Benutzer angefordert wird. Der durch den Benutzer angegebene target_size-Wert wird auf den nächsthöheren Grenzwert für virtuelle Protokolldateien gerundet. Wenn ein Benutzer z. B. einen target_size-Wert von 325 MB für die 600 MB umfassende Beispieldatei mit sechs 100 MB großen virtuellen Protokolldateien angibt, werden die beiden letzten virtuellen Protokolldateien entfernt, und die neue Dateigröße beträgt 400 MB.

Ein DBCC SHRINKDATABASE- oder DBCC SHRINKFILE-Vorgang versucht, die physische Protokolldatei sofort auf die angeforderte Größe zu verkleinern:

  • Wenn sich kein Teil des logischen Protokolls in den virtuellen Protokollen hinter dem Wert von target_size befindet, werden die virtuellen Protokolle hinter target_size freigegeben, und die erfolgreiche DBCC-Anweisung wird ohne Meldungen beendet.

Wenn sich ein Teil des logischen Protokolls in den virtuellen Protokollen hinter dem Wert von target_size befindet, gibt SQL Server Database Engine (Datenbankmodul) so viel Speicherplatz wie möglich frei und eine Informationsmeldung aus. Mithilfe dieser Meldung werden Sie darüber informiert, welche Aktionen Sie ausführen müssen, um das logische Protokoll aus den virtuellen Protokollen am Ende der Datei zu entfernen. Nachdem Sie diese Aktion durchgeführt haben, können Sie die DBCC-Anweisung erneut ausgeben, um den verbleibenden Speicherplatz freizugeben.

Angenommen, eine 600 MB umfassende Protokolldatei mit sechs virtuellen Protokolldateien verfügt über ein logisches Protokoll, das im virtuellen Protokoll 3 beginnt und im virtuellen Protokoll 4 endet, wenn Sie eine DBCC SHRINKFILE-Anweisung mit einem Wert für target_size von 275 MB ausführen, die drei Viertel bis zu einem virtuellen Protokoll 3 darstellt:

Protokolldatei mit 6 virtuellen Protokolldateien vor dem Verkleinern

Die virtuellen Protokolldateien 5 und 6 werden sofort freigegeben, da sie keinen Teil des logischen Protokolls enthalten. Um jedoch den angegebenen target_size-Wert zu erreichen, müsste die virtuelle Protokolldatei 4 ebenfalls freigegeben werden. Dies ist jedoch nicht möglich, da es den abschließenden Teil des logischen Protokolls enthält. Nach der Freigabe der virtuellen Protokolldateien 5 und 6 füllt Database Engine (Datenbankmodul) den verbleibenden Teil der virtuellen Protokolldatei 4 mit Pseudodatensätzen auf. Dadurch wird das Ende der Protokolldatei in das virtuelle Protokoll 1 verschoben. In den meisten Systemen wird für alle in der virtuellen Protokolldatei 4 beginnenden Transaktionen innerhalb von Sekunden ein Commit ausgeführt. Dies bedeutet, dass der gesamte aktive Teil des Protokolls in die virtuelle Protokolldatei 1 verschoben wird. Die Protokolldatei sieht nun wie folgt aus:

Protokolldatei wird auf 4 virtuelle Dateien verkleinert

Die DBCC SHRINKFILE-Anweisung gibt darüber hinaus eine Informationsmeldung aus, die besagt, dass nicht der gesamte angeforderte Speicherplatz freigegeben werden konnte und dass Sie eine BACKUP LOG-Anweisung ausführen können, um den verbleibenden Speicherplatz freizugeben. Nachdem der aktive Teil des Protokolls in die virtuelle Protokolldatei 1 verschoben wurde, wird mit einer BACKUP LOG-Anweisung das gesamte logische Protokoll abgeschnitten, das sich in der virtuellen Protokolldatei 4 befindet:

Protokolldateiergebnisse nach dem Abschneiden des Protokolls

Da die virtuelle Protokolldatei 4 keinen Teil des logischen Protokolls mehr enthält, können Sie nun die gleiche DBCC SHRINKFILE-Anweisung mit einem Wert für target_size von 275 MB ausführen. Die virtuelle Protokolldatei 4 wird anschließend freigegeben, und die Größe der physischen Protokolldatei wird auf die angeforderte Größe verringert.

HinweisHinweis

Bestimmte Faktoren, z. B. Transaktionen mit langer Ausführungszeit, können die virtuellen Protokolldateien für längere Zeit aktiv halten. Dies kann verhindern, dass das Protokoll im angeforderten Umfang oder überhaupt verkleinert wird. Weitere Informationen finden Sie unter Faktoren, die das Abschneiden des Protokolls verzögern können..