Handbuch zur Architektur und Verwaltung von Transaktionsprotokollen in SQL ServerSQL Server Transaction Log Architecture and Management Guide

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics JaParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics JaParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Jede SQL ServerSQL Server -Datenbank verfügt über ein Transaktionsprotokoll, in dem alle Transaktionen und Datenbankänderungen aufgezeichnet werden, die von den einzelnen Transaktionen vorgenommen werden.Every SQL ServerSQL Server database has a transaction log that records all transactions and the database modifications that are made by each transaction. Das Transaktionsprotokoll ist eine wichtige Komponente der Datenbank und wird im Falle eines Systemfehlers ggf. benötigt, um einen konsistenten Status der Datenbank wiederherzustellen.The transaction log is a critical component of the database and, if there is a system failure, the transaction log might be required to bring your database back to a consistent state. Dieses Handbuch enthält Informationen zur physischen und logischen Architektur des Transaktionsprotokolls.This guide provides information about the physical and logical architecture of the transaction log. Eine gute Kenntnis der Architektur kann Ihnen dabei helfen, Transaktionsprotokolle effizienter zu verwalten.Understanding the architecture can improve your effectiveness in managing transaction logs.

Logische Architektur des TransaktionsprotokollsTransaction Log Logical Architecture

Das SQL ServerSQL Server -Transaktionsprotokoll wird logisch so verwendet, als handele es sich um eine Folge von Protokolleinträgen.The SQL ServerSQL Server transaction log operates logically as if the transaction log is a string of log records. Jeder Protokolleintrag wird durch eine Protokollsequenznummer (LSN, Log Sequence Number) gekennzeichnet.Each log record is identified by a log sequence number (LSN). Jeder neue Protokolleintrag wird an das logische Ende des Protokolls geschrieben und erhält eine LSN, die höher ist als die LSN des vorherigen Eintrags.Each new log record is written to the logical end of the log with an LSN that is higher than the LSN of the record before it. Protokolldatensätze werden in einer seriellen Reihenfolge gespeichert. Wenn LSN2 größer als LSN1 ist, erfolgte die durch den Protokolldatensatz von LSN2 beschriebene Änderung nach der durch den Protokolldatensatz von LSN1 beschriebenen Änderung.Log records are stored in a serial sequence as they are created such that if LSN2 is greater than LSN1, the change described by the log record referred to by LSN2 occurred after the change described by the log record LSN1. Jeder Protokolleintrag enthält die ID der Transaktion, zu der er gehört.Each log record contains the ID of the transaction that it belongs to. Für jede Transaktion werden alle Protokolleinträge, die mit dieser Transaktion verbunden sind, individuell zu einer Kette verknüpft. Dies erfolgt mithilfe von Rückwärtszeigern, durch die der Rollback der Transaktion beschleunigt wird.For each transaction, all log records associated with the transaction are individually linked in a chain using backward pointers that speed the rollback of the transaction.

Protokolleinträge für Datenänderungen zeichnen entweder die durchgeführte logische Operation oder die Anfangs- und Endimages der geänderten Daten auf.Log records for data modifications record either the logical operation performed or they record the before and after images of the modified data. Ein Anfangsimage ist eine Kopie der Daten vor der Durchführung der Operation. Ein Endimage ist eine Kopie der Daten, nachdem die Operation durchgeführt wurde.The before image is a copy of the data before the operation is performed; the after image is a copy of the data after the operation has been performed.

Die Schritte zum Wiederherstellen einer Operation hängen von der Art des Protokolleintrags ab:The steps to recover an operation depend on the type of log record:

  • Protokollierung der logischen OperationLogical operation logged

    • Um einen Rollforward für die logische Operation auszuführen, wird sie erneut durchgeführt.To roll the logical operation forward, the operation is performed again.

    • Um einen Rollback für die logische Operation auszuführen, wird der logische Umkehrvorgang durchgeführt.To roll the logical operation back, the reverse logical operation is performed.

  • Protokollierung der Anfangs- und EndimagesBefore and after image logged

    • Um einen Rollforward für die Operation auszuführen, wird das Endimage übernommen.To roll the operation forward, the after image is applied.

    • Um einen Rollback für die Operation auszuführen, wird das Anfangsimage übernommen.To roll the operation back, the before image is applied.

Im Transaktionsprotokoll werden viele Operationsarten aufgezeichnet.Many types of operations are recorded in the transaction log. Dazu zählen die Operationen:These operations include:

  • Der Beginn und das Ende jeder Transaktion.The start and end of each transaction.

  • Jede Datenänderung (Einfügung, Update oder Löschung).Every data modification (insert, update, or delete). Hierzu zählen auch Änderungen, die von gespeicherten Systemprozeduren oder DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) an beliebigen Tabellen, einschließlich den Systemtabellen, vorgenommen werden.This includes changes by system stored procedures or data definition language (DDL) statements to any table, including system tables.

  • Jede Zuordnung oder Zuordnungsaufhebung von Blöcken und SeitenEvery extent and page allocation or deallocation.

  • Erstellen oder Löschen einer Tabelle oder eines Indexes.Creating or dropping a table or index.

Rollback-Operationen werden ebenfalls protokolliert.Rollback operations are also logged. Jede Transaktion reserviert Speicherplatz im Transaktionsprotokoll, um sicherzustellen, dass ausreichend Speicherplatz vorhanden ist, um einen Rollback infolge einer expliziten Rollback-Anweisung oder im Falle eines Fehlers zu unterstützen.Each transaction reserves space on the transaction log to make sure that enough log space exists to support a rollback that is caused by either an explicit rollback statement or if an error is encountered. Die Menge des reservierten Speicherplatzes hängt von den in der Transaktion durchgeführten Vorgängen ab, entspricht jedoch im Allgemeinen dem Speicherplatz, der zum Protokollieren der einzelnen Vorgänge verwendet wird.The amount of space reserved depends on the operations performed in the transaction, but generally it is equal to the amount of space used to log each operation. Dieser reservierte Speicherplatz wird freigegeben, sobald die Transaktion abgeschlossen ist.This reserved space is freed when the transaction is completed.

Als aktiver Teil des Protokolls aktives Protokoll oder Protokollfragment wird der Abschnitt der Protokolldatei aus dem ersten Protokolldatensatz bezeichnet, der für einen erfolgreichen Rollback der gesamten Datenbank auf den zuletzt geschriebenen Protokolldatensatz benötigt wird.The section of the log file from the first log record that must be present for a successful database-wide rollback to the last-written log record is called the active part of the log, active log, or tail of the log. Dies ist der Teil des Protokolls, der für eine vollständige Wiederherstellung der Datenbank erforderlich ist.This is the section of the log required to a full recovery of the database. Vom aktiven Teil des Protokolls kann niemals ein Teil abgeschnitten werden.No part of the active log can ever be truncated. Die Protokollfolgenummer (Log Sequence Number, LSN) des ersten Protokolldatensatzes wird als Mindestwiederherstellungs-LSN (MinLSN) bezeichnet.The log sequence number (LSN) of this first log record is known as the minimum recovery LSN (MinLSN). Weitere Informationen zu Vorgängen, die vom Transaktionsprotokoll unterstützt werden, finden Sie unter Das Transaktionsprotokoll (SQL Server).For more information on operations supported by the transaction log, see The Transaction Log (SQL Server).

Durch differenzielle Sicherungen und Protokollsicherungen wird ein späterer Status der Datenbank wiederhergestellt, was wiederum einer höheren LSN entspricht.Differential and log backups advance the restored database to a later time, which corresponds to a higher LSN.

Physische Architektur des TransaktionsprotokollsTransaction Log Physical Architecture

Das Transaktionsprotokoll in einer Datenbank erstreckt sich über eine oder mehrere physische Dateien.The transaction log in a database maps over one or more physical files. Konzeptionell ist die Protokolldatei eine Folge von Protokolldatensätzen.Conceptually, the log file is a string of log records. Physisch wird die Folge von Protokolldatensätzen effizient in dem Satz physischer Dateien gespeichert, die das Transaktionsprotokoll implementieren.Physically, the sequence of log records is stored efficiently in the set of physical files that implement the transaction log. Für jede Datenbank muss mindestens eine Protokolldatei vorhanden sein.There must be at least one log file for each database.

SQL Server-Datenbank-EngineSQL Server Database Engine teilt jede physische Protokolldatei intern in mehrere virtuelle Protokolldateien (VLFs) auf.The SQL Server-Datenbank-EngineSQL Server Database Engine divides each physical log file internally into a number of virtual log files (VLFs). Virtuelle Protokolldateien haben keine feste Größe, und es gibt keine feststehende Anzahl virtueller Protokolldateien für eine physische Protokolldatei.Virtual log files have no fixed size, and there is no fixed number of virtual log files for a physical log file. Datenbank-EngineDatabase Engine wählt die Größe der virtuellen Protokolldateien dynamisch beim Erstellen oder Erweitern von Protokolldateien aus.The Datenbank-EngineDatabase Engine chooses the size of the virtual log files dynamically while it is creating or extending log files. Datenbank-EngineDatabase Engine versucht, immer nur eine kleine Anzahl virtueller Dateien aufrechtzuerhalten.The Datenbank-EngineDatabase Engine tries to maintain a small number of virtual files. Welche Größe die virtuellen Dateien haben, nachdem eine Protokolldatei erweitert wurde, hängt von der zusammengenommenen Größe des vorhandenen Protokolls und dem Umfang der Dateierweiterung ab.The size of the virtual files after a log file has been extended is the sum of the size of the existing log and the size of the new file increment. Die Größe oder Anzahl der virtuellen Protokolldateien kann nicht von Administratoren konfiguriert oder festgelegt werden.The size or number of virtual log files cannot be configured or set by administrators.

Hinweis

Die VLF (Virtual Log File) wird gemäß der folgenden Methode erstellt:Virtual log file (VLF) creation follows this method:

  • Wenn die nächste Dateivergrößerung weniger als 1/8 der aktuellen physischen Protokollgröße beträgt, wird 1 VLF erstellt, die den Umfang der Dateivergrößerung abdeckt (beginnend mit SQL Server 2014 (12.x)SQL Server 2014 (12.x)).If the next growth is less than 1/8 of current log physical size, then create 1 VLF that covers the growth size (Starting with SQL Server 2014 (12.x)SQL Server 2014 (12.x))
  • Verwenden Sie die Methode, die vor 2014 eingeführt wurde, wenn die nächste Dateivergrößerung mehr als 1/8 der aktuellen Protokollgröße beträgt:If the next growth is more than 1/8 of the current log size, then use the pre-2014 method:
    • Wenn die Dateivergrößerung unter 64 MB liegt, werden 4 VLFs erstellt, die den Umfang der Dateivergrößerung abdecken. (Beispielsweise werden für eine Vergrößerung von 1 MB vier VLFs von 256 KB erstellt.)If growth is less than 64MB, create 4 VLFs that cover the growth size (e.g. for 1 MB growth, create four 256KB VLFs)
    • Wenn die Dateivergrößerung zwischen 64 MB und 1 GB beträgt, werden 8 VLFs erstellt, die den Umfang der Dateivergrößerung abdecken. (Beispielsweise werden für eine Vergrößerung von 512 MB acht VLFs von 64 MB erstellt.)If growth is from 64MB up to 1GB, create 8 VLFs that cover the growth size (e.g. for 512MB growth, create eight 64MB VLFs)
    • Bei einer Dateivergrößerung von mehr als 1 GB werden 16 VLFs erstellt, die den Umfang der Dateivergrößerung abdecken. (Beispielsweise werden für eine Vergrößerung von 8 GB sechzehn VLFs von 512 MB erstellt.)If growth is larger than 1GB, create 16 VLFs that cover the growth size (e.g. for 8 GB growth, create sixteen 512MB VLFs)

Wenn die Protokolldateien durch viele kleine Inkremente auf eine beträchtliche Größe anwachsen, enthalten sie zahlreiche virtuelle Protokolldateien.If the log files grow to a large size in many small increments, they will have many virtual log files. Hierdurch verlangsamen sich möglicherweise das Starten der Datenbank sowie Protokollsicherungs- und -wiederherstellungsvorgänge.This can slow down database startup and also log backup and restore operations. Umgekehrt enthalten diese wenige große virtuelle Protokolldateien, wenn die Protokolldateien durch wenige oder nur ein Inkrement auf eine beträchtliche Größe anwachsen.Conversely, if the log files are set to a large size with few or just one increment, they will have few very large virtual log files. Weitere Informationen zum Schätzen der erforderlichen Größe und der Einstellung für die automatische Vergrößerung eines Transaktionsprotokolls finden Sie unter Verwalten der Größe der Transaktionsprotokolldatei im Abschnitt Empfehlungen.For more information on properly estimating the required size and autogrow setting of a transaction log, refer to the Recommendations section of Manage the size of the transaction log file.

Es wird empfohlen, den Protokolldateien für eine optimale VLF-Verteilung mithilfe der erforderlichen Inkremente einen size-Wert zuzuweisen, der ungefähr der endgültigen erforderlichen Größe entspricht, und darüber hinaus einen relativ hohen Wert für growth_increment festzulegen.We recommend that you assign log files a size value close to the final size required, using the required increments to achieve optimal VLF distribution, and also have a relatively large growth_increment value. Lesen Sie den folgenden Tipp, um die optimale VLF-Verteilung für die aktuelle Größe des Transaktionsprotokolls zu ermitteln.See the tip below to determine the optimal VLF distribution for the current transaction log size.

  • Der mit dem Argument SIZE festgelegte size-Wert von ALTER DATABASE ist die Anfangsgröße der Protokolldatei.The size value, as set by the SIZE argument of ALTER DATABASE is the initial size for the log file.
  • Der growth_increment-Wert (auch als Wert für die automatische Vergrößerung bezeichnet), der mit dem Argument FILEGROWTH von ALTER DATABASE festgelegt wird, entspricht der Menge von Speicherplatz, die der Datei immer dann hinzugefügt wird, wenn neuer Speicherplatz erforderlich wird.The growth_increment value (also referred as the autogrow value), as set by the FILEGROWTH argument of ALTER DATABASE, is the amount of space added to the file every time new space is required.

Weitere Informationen zu den Argumenten FILEGROWTH und SIZE von ALTER DATABASE finden Sie unter ALTER DATABASE-Optionen FILE und FILEGROUP & #40;Transact-SQL& #41;.For more information on FILEGROWTH and SIZE arguments of ALTER DATABASE, see ALTER DATABASE (Transact-SQL) File and Filegroup Options.

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.To determine the optimal VLF distribution for the current transaction log size of all databases in a given instance, and the required growth increments to achieve the required size, see this script.

Das Transaktionsprotokoll ist eine umbrechende Protokolldatei.The transaction log is a wrap-around file. Nehmen Sie beispielsweise an, eine Datenbank verfügt über eine physische Protokolldatei, die in vier VLFs unterteilt ist.For example, consider a database with one physical log file divided into four VLFs. Wenn die Datenbank erstellt wird, beginnt die logische Protokolldatei am Anfang der ersten physischen Protokolldatei.When the database is created, the logical log file begins at the start of the physical log file. Neue Protokolldatensätze werden am Ende des logischen Protokolls hinzugefügt, das in Richtung des Endes des physischen Protokolls erweitert wird.New log records are added at the end of the logical log and expand toward the end of the physical log. Beim Abschneiden eines Protokolls werden alle virtuellen Protokolle freigegeben, deren Datensätze sich ohne Ausnahme vor der Mindestwiederherstellungs-Protokollfolgenummer (Minimum Recovery Log Sequence Number, MinLSN) befinden.Log truncation frees any virtual logs whose records all appear in front of the minimum recovery log sequence number (MinLSN). MinLSN ist die Protokollfolgenummer des ältesten Protokolldatensatzes, der für einen erfolgreichen Rollback der gesamten Datenbank benötigt wird.The MinLSN is the log sequence number of the oldest log record that is required for a successful database-wide rollback. Das Transaktionsprotokoll in der Beispieldatenbank würde in etwa so aussehen wie das Protokoll in der folgenden Abbildung.The transaction log in the example database would look similar to the one in the following illustration.

Veranschaulichung der Aufteilung einer physischen Protokolldatei in virtuelle Protokolle

Wenn das Ende des logischen Protokolls das Ende der physischen Protokolldatei erreicht, erfolgt ein Umbruch, und neue Protokolldatensätze werden nun wieder am Anfang der physischen Protokolldatei eingefügt.When the end of the logical log reaches the end of the physical log file, the new log records wrap around to the start of the physical log file.

Veranschaulichung der Umschließung im Zusammenhang mit einem logischen Transaktionsprotokoll in der physischen Protokolldatei

Solange das Ende des logischen Protokolls nicht den Anfang des logischen Protokolls erreicht, wird dieser Kreislauf endlos wiederholt.This cycle repeats endlessly, as long as the end of the logical log never reaches the beginning of the logical log. Wenn die alten Protokolldatensätze häufig genug abgeschnitten werden, um ausreichend Platz für alle neuen Protokolldatensätze freizugeben, die bis zum nächsten Prüfpunkt erstellt werden, wird das Protokoll nie vollständig aufgefüllt.If the old log records are truncated frequently enough to always leave sufficient room for all the new log records created through the next checkpoint, the log never fills. Wenn das Ende des logischen Protokolls jedoch den Anfang des logischen Protokolls erreicht, wird eine der beiden folgenden Aktionen eingeleitet:However, if the end of the logical log does reach the start of the logical log, one of two things occurs:

  • Wenn die FILEGROWTH-Einstellung für das Protokoll aktiviert und auf dem Datenträger Speicherplatz verfügbar ist, wird die Datei um die Menge vergrößert, die im growth_increment-Parameter angegeben ist, und der Erweiterung werden neue Protokolldatensätze hinzugefügt.If the FILEGROWTH setting is enabled for the log and space is available on the disk, the file is extended by the amount specified in the growth_increment parameter and the new log records are added to the extension. Weitere Informationen zur FILEGROWTH-Einstellung finden Sie unter ALTER DATABASE-Optionen FILE und FILEGROUP (Transact-SQL).For more information about the FILEGROWTH setting, see ALTER DATABASE File and Filegroup Options (Transact-SQL).

  • Wenn die FILEGROWTH-Einstellung nicht aktiviert ist oder der Datenträger mit der Protokolldatei über weniger freien Speicherplatz verfügt als in growth_increment angegeben, wird der Fehler 9002 generiert.If the FILEGROWTH setting is not enabled, or the disk that is holding the log file has less free space than the amount specified in growth_increment, an 9002 error is generated. Weitere Informationen finden Sie unter Problembehandlung bei vollen Transaktionsprotokollen.Refer to Troubleshoot a Full Transaction Log for more information.

Wenn das Protokoll mehrere physische Protokolldateien enthält, durchläuft das logische Protokoll alle physischen Protokolldateien, bevor es umbricht und neue Einträge am Anfang der ersten physischen Protokolldatei einfügt.If the log contains multiple physical log files, the logical log will move through all the physical log files before it wraps back to the start of the first physical log file.

Wichtig

Weitere Informationen zur Verwaltung der Größe von Transaktionsprotokolldateien finden Sie unter Verwalten der Größe der Transaktionsprotokolldatei.For more information about transaction log size management, see Manage the Size of the Transaction Log File.

ProtokollkürzungLog Truncation

Die Protokollkürzung ist wichtig, um ein Auffüllen des Protokolls verhindern zu können.Log truncation is essential to keep the log from filling. Durch die Protokollkürzung werden inaktive virtuelle Protokolldateien aus dem logischen Transaktionsprotokoll einer SQL ServerSQL Server -Datenbank gelöscht, wodurch Speicherplatz im logischen Protokoll zur Wiederverwendung durch das physische Transaktionsprotokoll freigegeben wird.Log truncation deletes inactive virtual log files from the logical transaction log of a SQL ServerSQL Server database, freeing space in the logical log for reuse by the physical transaction log. Wird ein Transaktionsprotokoll nicht gekürzt, füllt sich dadurch möglicherweise der gesamte Speicherplatz des Datenträgers auf, der den zugehörigen physischen Protokolldateien zugeordnet ist.If a transaction log were never truncated, it would eventually fill all the disk space that is allocated to its physical log files. Bevor das Protokoll jedoch gekürzt werden kann, ist ein Prüfpunktvorgang erforderlich.However, before the log can be truncated, a checkpoint operation must occur. Durch einen Prüfpunktvorgang werden die aktuellen, im Arbeitsspeicher geänderten Seiten (auch als modifizierte Seiten bezeichnet) sowie Transaktionsprotokollinformationen vom Arbeitsspeicher auf den Datenträger geschrieben.A checkpoint writes the current in-memory modified pages (known as dirty pages) and transaction log information from memory to disk. Beim Ausführen des Prüfpunkts wird der inaktive Teil des Transaktionsprotokolls als wiederverwendbar markiert.When the checkpoint is performed, the inactive portion of the transaction log is marked as reusable. Anschließend kann der inaktive Teil durch Abschneiden des Protokolls freigegeben werden.Thereafter, the inactive portion can be freed by log truncation. Weitere Informationen zu Prüfpunkten finden Sie unter Datenbankprüfpunkte (SQL Server).For more information about checkpoints, see Database Checkpoints (SQL Server).

Die folgenden Abbildungen zeigen ein Transaktionsprotokoll vor und nach dem Abschneiden.The following illustrations show a transaction log before and after truncation. In der ersten Abbildung wird ein Transaktionsprotokoll gezeigt, das noch nie abgeschnitten wurde.The first illustration shows a transaction log that has never been truncated. Aktuell verwendet das logische Protokoll vier virtuelle Protokolldateien.Currently, four virtual log files are in use by the logical log. Das logische Protokoll beginnt am Anfang der ersten virtuellen Protokolldatei und endet beim virtuellen Protokoll 4.The logical log starts at the front of the first virtual log file and ends at virtual log 4. Der MinLSN-Datensatz befindet sich im virtuellen Protokoll 3.The MinLSN record is in virtual log 3. Das virtuelle Protokoll 1 und das virtuelle Protokoll 2 enthalten nur inaktive Protokolldatensätze.Virtual log 1 and virtual log 2 contain only inactive log records. Diese Datensätze können abgeschnitten werden.These records can be truncated. Das virtuelle Protokoll 5 wurde noch nicht verwendet und ist nicht Teil des aktuellen logischen Protokolls.Virtual log 5 is still unused and is not part of the current logical log.

Veranschaulichung der Anzeige eines Transaktionsprotokolls vor dem Abschneiden

Die zweite Abbildung zeigt das Protokoll, nachdem es abgeschnitten wurde.The second illustration shows how the log appears after being truncated. Die virtuellen Protokolle 1 und 2 wurden für die Wiederverwendung freigegeben.Virtual log 1 and virtual log 2 have been freed for reuse. Das logische Protokoll beginnt nun am Anfang des virtuellen Protokolls 3.The logical log now starts at the beginning of virtual log 3. Das virtuelle Protokoll 5 wurde noch nicht verwendet und ist nicht Teil des aktuellen logischen Protokolls.Virtual log 5 is still unused, and it is not part of the current logical log.

Veranschaulichung der Anzeige eines Transaktionsprotokolls nach dem Abschneiden

Die Protokollkürzung erfolgt automatisch wie folgt, außer es tritt aus irgendeinem Grund eine Verzögerung auf:Log truncation occurs automatically after the following events, except when delayed for some reason:

  • Unter dem einfachen Wiederherstellungsmodell, nach einem Prüfpunkt.Under the simple recovery model, after a checkpoint.
  • Unter dem vollständigen oder massenprotokollierten Wiederherstellungsmodell, nach einer Protokollsicherung, wenn seit der vorherigen Sicherung ein Prüfpunkt aufgetreten ist.Under the full recovery model or bulk-logged recovery model, after a log backup, if a checkpoint has occurred since the previous backup.

Die Protokollkürzung kann durch verschiedene Faktoren verzögert werden.Log truncation can be delayed by a variety of factors. Im Falle einer langen Verzögerung der Protokollkürzung kann sich das Transaktionsprotokoll füllen.In the event of a long delay in log truncation, the transaction log can fill up. Weitere Informationen finden Sie unter Faktoren, die die Protokollkürzung verzögern können und Problembehandlung bei vollen Transaktionsprotokollen (SQL Server-Fehler 9002).For information, see Factors that can delay log truncation and Troubleshoot a Full Transaction Log (SQL Server Error 9002).

Write-Ahead-TransaktionsprotokollWrite-Ahead Transaction Log

In diesem Abschnitt wird die Aufgabe des Write-Ahead-Transaktionsprotokolls beim Aufzeichnen von Datenänderungen auf dem Datenträger beschrieben.This section describes the role of the write-ahead transaction log in recording data modifications to disk. SQL ServerSQL Server verwendet einen Write-Ahead-Protokollalgorithmus (WAL), durch das sichergestellt wird, dass Datenänderungen erst dann auf den Datenträger geschrieben werden, nachdem der entsprechende Protokolldatensatz auf den Datenträger geschrieben wurde.uses a write-ahead logging (WAL) algorithm, which guarantees that no data modifications are written to disk before the associated log record is written to disk. Dies schützt die ACID-Eigenschaften einer Transaktion.This maintains the ACID properties for a transaction.

Um die Funktionsweise des Write-Ahead-Protokolls zu verstehen, müssen Sie zunächst wissen, wie geänderte Daten auf den Datenträger geschrieben werden.To understand how the write-ahead log works, it is important for you to know how modified data is written to disk. SQL ServerSQL Server verwaltet einen Puffercache, in den Datenseiten gelesen werden, wenn Daten abgerufen werden müssen.maintains a buffer cache into which it reads data pages when data must be retrieved. Eine Seite, die im Puffercache geändert wurde, wird nicht sofort auf den Datenträger geschrieben, sondern als geändertmarkiert.When a page is modified in the buffer cache, it is not immediately written back to disk; instead, the page is marked as dirty. Auf einer Datenseite können mehrere logische Schreibvorgänge ausgeführt werden, bevor sie physisch auf den Datenträger geschrieben wird.A data page can have more than one logical write made before it is physically written to disk. Für jeden logischen Schreibvorgang wird ein Transaktionsprotokoll-Datensatz in den Protokollcache geschrieben, der die Änderung aufzeichnet.For each logical write, a transaction log record is inserted in the log cache that records the modification. Die Protokolldatensätze müssen auf den Datenträger geschrieben werden, bevor die zugehörige modifizierte Seite aus dem Puffercache entfernt und auf den Datenträger geschrieben wird.The log records must be written to disk before the associated dirty page is removed from the buffer cache and written to disk. Mit dem Prüfpunktprozess (checkpoint) wird der Puffercache regelmäßig auf Puffer mit Seiten aus einer angegebenen Datenbank überprüft, und alle modifizierten Seiten werden auf den Datenträger geschrieben.The checkpoint process periodically scans the buffer cache for buffers with pages from a specified database and writes all dirty pages to disk. Durch Prüfpunkte kann bei einer späteren Wiederherstellung Zeit eingespart werden, da ein Punkt erstellt wird, an dem auf jeden Fall alle modifizierten Seiten auf den Datenträger geschrieben worden sind.Checkpoints save time during a later recovery by creating a point at which all dirty pages are guaranteed to have been written to disk.

Wird eine geänderte Datenseite aus dem Puffercache auf den Datenträger geschrieben, wird dies als Leeren der Seite bezeichnet.Writing a modified data page from the buffer cache to disk is called flushing the page. SQL ServerSQL Server Durch die Logik von wird verhindert, dass eine geänderte Seite geleert wird, bevor der zugehörige Protokolldatensatz geschrieben wurde.has logic that prevents a dirty page from being flushed before the associated log record is written. Protokolldatensätze werden auf den Datenträger geschrieben, wenn die Protokollpuffer geleert werden.Log records are written to disk when the log buffers are flushed. Dies geschieht immer dann, wenn eine Transaktion committet wird oder der Protokollpuffer voll wird.This happens whenever a transaction commits or the log buffers become full.

TransaktionsprotokollsicherungenTransaction Log Backups

In diesem Abschnitt werden Konzepte zum Sichern und Wiederherstellen (Anwenden) von Transaktionsprotokollen vorgestellt.This section presents concepts about how to back up and restore (apply) transaction logs. Beim vollständigen und beim massenprotokollierten Wiederherstellungsmodell müssen zur Wiederherstellung von Daten routinemäßige Sicherungen der Transaktionsprotokolle (Protokollsicherungen) ausgeführt werden.Under the full and bulk-logged recovery models, taking routine backups of transaction logs (log backups) is necessary for recovering data. Sie können das Protokoll sichern, während eine vollständige Sicherung ausgeführt wird.You can back up the log while any full backup is running. Weitere Informationen zu Wiederherstellungsmodellen finden Sie unter Sichern und Wiederherstellen von SQL Server-Datenbanken.For more information about recovery models, see Back Up and Restore of SQL Server Databases.

Bevor Sie die erste Protokollsicherung erstellen können, müssen Sie eine vollständige Sicherung erstellen, z. B. eine Datenbanksicherung oder die erste von mehreren Dateisicherungen.Before you can create the first log backup, you must create a full backup, such as a database backup or the first in a set of file backups. Die Wiederherstellung einer Datenbank, für die nur Dateisicherungen verwendet werden, kann komplex werden.Restoring a database by using only file backups can become complex. Deshalb wird empfohlen, wenn möglich mit einer vollständigen Datenbanksicherung zu beginnen.Therefore, we recommend that you start with a full database backup when you can. Anschließend ist das regelmäßige Sichern des Transaktionsprotokolls erforderlich.Thereafter, backing up the transaction log regularly is necessary. Dadurch wird nicht nur die Gefahr von Datenverlusten minimiert, sondern es wird auch die Kürzung des Transaktionsprotokolls ermöglicht.This not only minimizes work-loss exposure but also enables truncation of the transaction log. Üblicherweise wird das Transaktionsprotokoll nach jeder konventionellen Protokollsicherung abgeschnitten.Typically, the transaction log is truncated after every conventional log backup.

Wichtig

Es wird empfohlen, entsprechend Ihren Geschäftsanforderungen ausreichend häufige Protokollsicherungen auszuführen. Die Häufigkeit sollte sich danach richten, inwiefern Sie Datenverlust (beispielsweise durch einen beschädigten Protokollspeicher) tolerieren können.We recommend taking frequent enough log backups to support your business requirements, specifically your tolerance for work loss such as might be caused by a damaged log storage. Beim Festlegen einer geeigneten Häufigkeit gilt es, einen Kompromiss aus Ihrer Toleranz gegenüber der Gefahr von Datenverlust und Ihrer Fähigkeit zum Speichern, Verwalten und zum möglichen Wiederherstellen von Protokollsicherungen zu finden.The appropriate frequency for taking log backups depends on your tolerance for work-loss exposure balanced by how many log backups you can store, manage, and, potentially, restore. Denken Sie bei der Implementierung Ihrer Wiederherstellungsstrategie an die erforderliche RTO und RPO und insbesondere an den Zeitplan für die Protokollsicherung.Think about the required RTO and RPO when implementing your recovery strategy, and specifically the log backup cadence. Es kann ausreichen, alle 15 bis 30 Minuten eine Protokollsicherung auszuführen.Taking a log backup every 15 to 30 minutes might be enough. Wenn es für Ihr Geschäft erforderlich ist, die Gefahr des Datenverlusts zu minimieren, können Sie Protokollsicherungen häufiger ausführen.If your business requires that you minimize work-loss exposure, consider taking log backups more frequently. Häufigere Protokollsicherungen bieten zusätzlich den Vorteil, dass das Protokoll häufiger abgeschnitten wird, wodurch kleinere Protokolldateien entstehen.More frequent log backups have the added advantage of increasing the frequency of log truncation, resulting in smaller log files.

Wichtig

Um die Anzahl der zum Wiederherstellen benötigten Protokollsicherungen zu begrenzen, ist es wichtig, Daten regelmäßig zu sichern.To limit the number of log backups that you need to restore, it is essential to routinely back up your data. Beispielsweise können Sie eine wöchentliche vollständige Datenbanksicherung und tägliche differenzielle Datenbanksicherungen planen.For example, you might schedule a weekly full database backup and daily differential database backups.
Nicht vergessen: Denken Sie bei der Implementierung Ihrer Wiederherstellungsstrategie an die erforderliche RTO und RPO und insbesondere an den Zeitplan für die vollständige differenzielle Datenbanksicherung.Again, think about the required RTO and RPO when implementing your recovery strategy, and specifically the full and differential database backup cadence.

Informationen zu Transaktionsprotokollsicherungen finden Sie unter Transaktionsprotokollsicherungen (SQL Server).For more information about transaction log backups, see Transaction Log Backups (SQL Server).

Die ProtokollketteThe Log Chain

Eine fortlaufende Abfolge von Protokollsicherungen wird als Protokollkettebezeichnet.A continuous sequence of log backups is called a log chain. Eine Protokollkette beginnt mit einer vollständigen Sicherung der Datenbank.A log chain starts with a full backup of the database. Gewöhnlich wird eine neue Protokollkette nur gestartet, wenn die Datenbank zum ersten Mal gesichert wird oder wenn vom einfachen zum vollständigen oder massenprotokollierten Wiederherstellungsmodell gewechselt wird.Usually, a new log chain is only started when the database is backed up for the first time or after the recovery model is switched from simple recovery to full or bulk-logged recovery. Die bestehende Protokollkette bleibt intakt, es sei denn, Sie überschreiben beim Erstellen einer vollständigen Datenbanksicherung bestehende Sicherungssätze.Unless you choose to overwrite existing backup sets when creating a full database backup, the existing log chain remains intact. Mit einer intakten Protokollkette können Sie Ihre Datenbank aus einer beliebigen vollständigen Datenbanksicherung im Mediensatz wiederherstellen, gefolgt von allen weiteren Protokollsicherungen bis zum Wiederherstellungspunkt.With the log chain intact, you can restore your database from any full database backup in the media set, followed by all subsequent log backups up through your recovery point. Der Wiederherstellungspunkt kann das Ende der letzten Protokollsicherung oder ein bestimmter Wiederherstellungspunkt in einer beliebigen Protokollsicherung sein.The recovery point could be the end of the last log backup or a specific recovery point in any of the log backups. Weitere Informationen finden Sie unter Transaktionsprotokollsicherungen (SQL Server).For more information, see Transaction Log Backups (SQL Server).

Um eine Datenbank bis zu dem Punkt, an dem ein Fehler aufgetreten ist, wiederherzustellen, muss die Protokollkette intakt sein.To restore a database up to the point of failure, the log chain must be intact. Das heißt, eine ununterbrochene Sequenz von Transaktionsprotokollsicherungen muss sich bis zum Zeitpunkt des Fehlers erstrecken.That is, an unbroken sequence of transaction log backups must extend up to the point of failure. Wo diese Protokollsequenz anfangen muss, richtet sich nach dem Typ der Datensicherungen, die Sie wiederherstellen: Datenbank-, Teil- oder Dateisicherung.Where this sequence of log must start depends on the type of data backups you are restoring: database, partial, or file. Bei einer Datenbank- oder Teilsicherung muss die Sequenz der Protokollsicherungen am Ende einer Datenbank- oder Teilsicherung beginnen.For a database or partial backup, the sequence of log backups must extend from the end of a database or partial backup. Bei einer Gruppe von Dateisicherungen muss die Sequenz der Protokollsicherungen mit dem Anfang einer vollständigen Gruppe von Dateisicherungen beginnen.For a set of file backups, the sequence of log backups must extend from the start of a full set of file backups. Weitere Informationen finden Sie unter Anwenden von Transaktionsprotokollsicherungen (SQL Server).For more information, see Apply Transaction Log Backups (SQL Server).

Wiederherstellen von ProtokollsicherungenRestore Log Backups

Beim Wiederherstellen einer Protokollsicherung wird ein Rollforward für die im Transaktionsprotokoll aufgezeichneten Änderungen ausgeführt, um den genauen Zustand der Datenbank zu dem Zeitpunkt, als der Protokollsicherungsvorgang gestartet wurde, wiederherzustellen.Restoring a log backup rolls forward the changes that were recorded in the transaction log to re-create the exact state of the database at the time the log backup operation started. Wenn Sie eine Datenbank wiederherstellen, müssen Sie die Protokollsicherungen wiederherstellen, die nach der vollständigen Datenbanksicherung erstellt wurden, die Sie wiederherstellen, oder die Protokollsicherungen ab dem Start der ersten Dateisicherung, die Sie wiederherstellen.When you restore a database, you will have to restore the log backups that were created after the full database backup that you restore, or from the start of the first file backup that you restore. Nach dem Wiederherstellen der aktuellsten Daten oder der aktuellsten differenziellen Sicherung müssen Sie normalerweise eine Reihe von Protokollsicherungen wiederherstellen, bis Sie den Wiederherstellungspunkt erreichen.Typically, after you restore the most recent data or differential backup, you must restore a series of log backups until you reach your recovery point. Dann stellen Sie die Datenbank wieder her.Then, you recover the database. Dabei wird ein Rollback aller Transaktionen ausgeführt, die beim Start der Wiederherstellung unvollständig waren, und die Datenbank wird online geschaltet.This rolls back all transactions that were incomplete when the recovery started and brings the database online. Nach der Wiederherstellung der Datenbank können keine weiteren Sicherungen wiederhergestellt werden.After the database has been recovered, you cannot restore any more backups. Weitere Informationen finden Sie unter Anwenden von Transaktionsprotokollsicherungen (SQL Server).For more information, see Apply Transaction Log Backups (SQL Server).

Prüfpunkte und der aktive Teil des ProtokollsCheckpoints and the Active Portion of the Log

Prüfpunkte leeren modifizierte Datenseiten aus dem Puffercache der aktuellen Datenbank auf dem Datenträger.Checkpoints flush dirty data pages from the buffer cache of the current database to disk. Auf diese Weise wird der aktive Teil des Protokolls minimiert, der im Rahmen einer vollständigen Wiederherstellung einer Datenbank verarbeitet werden muss.This minimizes the active portion of the log that must be processed during a full recovery of a database. Während einer vollständigen Wiederherstellung werden die folgenden Arten von Aktionen ausgeführt:During a full recovery, the following types of actions are performed:

  • Für die Protokolldatensätze zu den Änderungen, die vor dem Systemausfall nicht auf den Datenträger geleert wurden, wird ein Rollforward durchgeführt.The log records of modifications not flushed to disk before the system stopped are rolled forward.
  • Für alle Änderungen, die mit unvollständigen Transaktionen verbunden sind, z B. Transaktionen, für die kein COMMIT- oder ROLLBACK-Protokolldatensatz vorliegt, wird ein Rollback ausgeführt.All modifications associated with incomplete transactions, such as transactions for which there is no COMMIT or ROLLBACK log record, are rolled back.

PrüfpunktvorgangCheckpoint Operation

Ein Prüfpunkt führt die folgenden Vorgänge in der Datenbank aus:A checkpoint performs the following processes in the database:

  • Schreiben eines Datensatzes in die Protokolldatei, mit dem der Beginn des Prüfpunktes markiert wird.Writes a record to the log file, marking the start of the checkpoint.

  • Speichern der aufgezeichneten Informationen für den Prüfpunkt in einer Kette von Prüfpunkt-Protokolldatensätzen.Stores information recorded for the checkpoint in a chain of checkpoint log records.

    Ein Teil der im Prüfpunkt aufgezeichneten Informationen besteht aus der LSN (Log Sequence Number oder Protokollfolgenummer) des ersten Protokolldatensatzes, der für eine erfolgreiche Durchführung eines datenbankweiten Rollbacks vorhanden sein muss.One piece of information recorded in the checkpoint is the log sequence number (LSN) of the first log record that must be present for a successful database-wide rollback. Diese LSN wird als Mindestwiederherstellungs-LSN (MinLSN) bezeichnet.This LSN is called the Minimum Recovery LSN (MinLSN). Die MinLSN gibt den Mindestwert für Folgendes an:The MinLSN is the minimum of the:

    • LSN des Beginns des Prüfpunktes.LSN of the start of the checkpoint.
    • LSN des Beginns der ältesten aktiven Transaktion.LSN of the start of the oldest active transaction.
    • LSN des Beginns der ältesten Replikationstransaktion, die noch nicht an die Verteilungsdatenbank übermittelt wurde.LSN of the start of the oldest replication transaction that has not yet been delivered to the distribution database.

    Die Prüfpunktdatensätze enthalten auch eine Liste aller aktiven Transaktionen, die die Datenbank geändert haben.The checkpoint records also contain a list of all the active transactions that have modified the database.

  • Markieren des Speicherplatzes vor der MinLSN für die Wiederverwendung, wenn die Datenbank das einfache Wiederherstellungsmodell verwendet.If the database uses the simple recovery model, marks for reuse the space that precedes the MinLSN.

  • Schreiben aller modifizierten Protokoll- und Datenseiten auf den Datenträger.Writes all dirty log and data pages to disk.

  • Schreiben eines Datensatzes in die Protokolldatei, mit dem das Ende des Prüfpunktes markiert wird.Writes a record marking the end of the checkpoint to the log file.

  • Schreiben der LSN des Anfangs dieser Kette auf die Datenbank-Startseite.Writes the LSN of the start of this chain to the database boot page.

Aktivitäten, die einen Prüfpunkt auslösenActivities that cause a Checkpoint

Prüfpunkte treten in den folgenden Situationen auf:Checkpoints occur in the following situations:

  • Eine CHECKPOINT-Anweisung wird explizit ausgeführt.A CHECKPOINT statement is explicitly executed. Ein Prüfpunkt tritt in der aktuellen Datenbank für die Verbindung auf.A checkpoint occurs in the current database for the connection.
  • Ein minimal protokollierter Vorgang wird in der Datenbank ausgeführt, z. B. wird ein Massenkopiervorgang mit einer Datenbank ausgeführt, die das massenprotokollierte Wiederherstellungsmodell verwendet.A minimally logged operation is performed in the database; for example, a bulk-copy operation is performed on a database that is using the Bulk-Logged recovery model.
  • Datenbankdateien wurden mit ALTER DATABASE hinzugefügt oder entfernt.Database files have been added or removed by using ALTER DATABASE.
  • Eine SQL Server-Instanz wurde durch eine SHUTDOWN-Anweisung oder Beenden des SQL Server-Dienstes (MSSQLSERVER) beendet.An instance of SQL Server is stopped by a SHUTDOWN statement or by stopping the SQL Server (MSSQLSERVER) service. Durch jede der Aktionen wird ein Prüfpunkt in jeder Datenbank der SQL Server-Instanz ausgelöst.Either action causes a checkpoint in each database in the instance of SQL Server.
  • Eine SQL Server-Instanz erzeugt regelmäßig automatische Prüfpunkte in jeder Datenbank, um die Zeitspanne zu verkürzen, die die Instanz zum Wiederherstellen der Datenbank benötigen würde.An instance of SQL Server periodically generates automatic checkpoints in each database to reduce the time that the instance would take to recover the database.
  • Eine vollständige Datenbanksicherung wird ausgeführt.A database backup is taken.
  • Eine Aktivität wird ausgeführt, für die das Herunterfahren einer Datenbank erforderlich ist.An activity requiring a database shutdown is performed. Beispielsweise besitzt AUTO_CLOSE den Status ON, und die letzte Benutzerverbindung mit der Datenbank wird geschlossen, oder eine Änderung einer Datenbankoption wird vorgenommen, für die ein Neustart der Datenbank erforderlich ist.For example, AUTO_CLOSE is ON and the last user connection to the database is closed, or a database option change is made that requires a restart of the database.

Automatische PrüfpunkteAutomatic Checkpoints

Die SQL Server-Datenbank-Engine generiert automatische Prüfpunkte.The SQL Server Database Engine generates automatic checkpoints. Das Intervall zwischen automatischen Prüfpunkten wird anhand des belegten Speicherplatzes des Protokolls und der seit dem letzten Prüfpunkt verstrichenen Zeitspanne festgelegt.The interval between automatic checkpoints is based on the amount of log space used and the time elapsed since the last checkpoint. Werden nur wenige Änderungen in der Datenbank vorgenommen, kann das Zeitintervall zwischen den automatischen Prüfpunkten sehr unterschiedlich bzw. lang sein.The time interval between automatic checkpoints can be highly variable and long, if few modifications are made in the database. Wenn eine Vielzahl von Daten geändert werden, können automatische Prüfpunkte ebenfalls häufig auftreten.Automatic checkpoints can also occur frequently if lots of data is modified.

Verwenden Sie die Serverkonfigurationsoption Wiederherstellungsintervall , um das Intervall zwischen den automatischen Prüfpunkten aller Datenbanken in einer Serverinstanz zu berechnen.Use the recovery interval server configuration option to calculate the interval between automatic checkpoints for all the databases on a server instance. Durch diese Option wird angegeben, wie viel Zeit die Datenbank-Engine höchstens benötigen sollte, um eine Datenbank während des Systemstarts wiederherzustellen.This option specifies the maximum time the Database Engine should use to recover a database during a system restart. Die Datenbank-Engine schätzt, wie viele Protokolldatensätze während einer Datenbankwiederherstellung in dem Wiederherstellungsintervall verarbeitet werden können.The Database Engine estimates how many log records it can process in the recovery interval during a recovery operation.

Das Intervall zwischen automatischen Prüfpunkten hängt außerdem vom Wiederherstellungsmodell ab:The interval between automatic checkpoints also depends on the recovery model:

  • Wenn die Datenbank entweder das vollständige oder das massenprotokollierte Wiederherstellungsmodell verwendet, wird ein automatischer Prüfpunkt generiert, sobald die Anzahl der Protokolldatensätze die Anzahl an Einträgen erreicht, die laut der Datenbank-Engine in dem Zeitraum verarbeitet werden können, der in der Option „Wiederherstellungsintervall“ angegeben ist.If the database is using either the full or bulk-logged recovery model, an automatic checkpoint is generated whenever the number of log records reaches the number the Database Engine estimates it can process during the time specified in the recovery interval option.

  • Wenn die Datenbank das einfache Wiederherstellungsmodell verwendet, wird ein automatischer Prüfpunkt erzeugt, sobald die Anzahl der Protokolldatensätze dem jeweils kleineren der beiden folgenden Werte entspricht:If the database is using the simple recovery model, an automatic checkpoint is generated whenever the number of log records reaches the lesser of these two values:

    • Das Protokoll ist zu 70 % gefüllt.The log becomes 70 percent full.
    • Die Anzahl der tatsächlichen Protokolldatensätze erreicht die von der Datenbank-Engine geschätzte Anzahl an Einträgen, die in dem Zeitraum verarbeitet werden können, der in der Option „Wiederherstellungsintervall“ angegeben ist.The number of log records reaches the number the Database Engine estimates it can process during the time specified in the recovery interval option.

Informationen zum Festlegen des Wiederherstellungsintervalls finden Sie unter Konfigurieren der Serverkonfigurationsoption „Wiederherstellungsintervall“.For information about setting the recovery interval, see Configure the recovery interval Server Configuration Option.

Tipp

Die erweiterte Setupoption „-k“ von SQL Server ermöglicht Datenbankadministratoren, das Prüfpunkt-E/A-Verhalten auf Basis des Durchsatzes des E/A-Subsystems für einige Prüfpunkttypen zu drosseln.The -k SQL Server advanced setup option enables a database administrator to throttle checkpoint I/O behavior based on the throughput of the I/O subsystem for some types of checkpoints. Die Setupoption „-k“ gilt für automatische Prüfpunkte sowie für andere, nicht gedrosselte Prüfpunkte.The -k setup option applies to automatic checkpoints and any otherwise unthrottled checkpoints.

Automatische Prüfpunkte schneiden den ungenutzten Teil des Transaktionsprotokolls ab, wenn die Datenbank das einfache Wiederherstellungsmodell verwendet.Automatic checkpoints truncate the unused section of the transaction log if the database is using the simple recovery model. Das Protokoll wird jedoch nicht durch automatische Prüfpunkte abgeschnitten, wenn die Datenbank das Modell der vollständigen oder massenprotokollierten Wiederherstellung verwendet.However, if the database is using the full or bulk-logged recovery models, the log is not truncated by automatic checkpoints. Weitere Informationen finden Sie unter Das Transaktionsprotokoll (SQL Server).For more information, see The Transaction Log.

Die CHECKPOINT-Anweisung stellt jetzt ein optionales checkpoint_duration-Argument bereit, das die gewünschte Zeitdauer (in Sekunden) für die zu beendenden Prüfpunkte angibt.The CHECKPOINT statement now provides an optional checkpoint_duration argument that specifies the requested period of time, in seconds, for checkpoints to finish. Weitere Informationen finden Sie unter CHECKPOINT (Transact-SQL).For more information, see CHECKPOINT.

aktives ProtokollActive Log

Der Abschnitt der Protokolldatei von der MinLSN bis zu dem zuletzt geschriebenen Protokolldatensatz wird aktiver Teil des Protokolls oder aktives Protokoll genannt.The section of the log file from the MinLSN to the last-written log record is called the active portion of the log, or the active log. Dies ist der Teil des Protokolls, der für eine vollständige Wiederherstellung der Datenbank erforderlich ist.This is the section of the log required to do a full recovery of the database. Vom aktiven Teil des Protokolls kann niemals ein Teil abgeschnitten werden.No part of the active log can ever be truncated. Alle Protokolldatensätze müssen aus den Teilen des Protokolls abgeschnitten werden, die vor der MinLSN liegen.All log records must be truncated from the parts of the log before the MinLSN.

Bei der folgenden Abbildung handelt es sich um die vereinfachte Version des Endes eines Transaktionsprotokolls mit zwei aktiven Transaktionen.The following illustration shows a simplified version of the end-of-a-transaction log with two active transactions. Die Prüfpunkteinträge wurden zu einem einzigen Eintrag zusammengefasst.Checkpoint records have been compacted to a single record.

Veranschaulichung des Endes eines Transaktionsprotokolls mit zwei aktiven Transaktionen und einem komprimierten Prüfpunktdatensatz

LSN 148 ist der letzte Eintrag im Transaktionsprotokoll.LSN 148 is the last record in the transaction log. Zum Zeitpunkt der Verarbeitung des Prüfpunktes, der bei LSN 147 aufgezeichnet wurde, wurde für Tran 1 ein Commit ausgeführt, und Tran 2 war die einzige aktive Transaktion.At the time that the recorded checkpoint at LSN 147 was processed, Tran 1 had been committed and Tran 2 was the only active transaction. Hierdurch wird der erste Protokolldatensatz für Tran 2 zum ältesten Protokolleintrag für eine Transaktion, die zum Zeitpunkt des letzten Prüfpunktes aktiviert war.That makes the first log record for Tran 2 the oldest log record for a transaction active at the time of the last checkpoint. LSN 142, der Eintrag für den Transaktionsbeginn von Tran 2, wird somit zur MinLSN.This makes LSN 142, the Begin transaction record for Tran 2, the MinLSN.

Lang andauernde TransaktionenLong-running transactions

Das aktive Protokoll muss jeden Teil aller Transaktionen umfassen, für die noch kein Commit ausgeführt wurde.The active log must include every part of all uncommitted transactions. Eine Anwendung, die eine Transaktion startet und für diese Transaktion keinen Commit oder Rollback ausführt, verhindert, dass Datenbank-EngineDatabase Engine die MinLSN heraufsetzt.An application that starts a transaction and does not commit it or roll it back prevents the Datenbank-EngineDatabase Engine from advancing the MinLSN. Dies kann zu zwei Arten von Problemen führen:This can cause two types of problems:

  • Wenn das System heruntergefahren wird, nachdem die Transaktion zahlreiche Änderungen vorgenommen hat, für die kein Commit ausgeführt wurde, kann die Wiederherstellungsphase beim nachfolgenden Neustart erheblich länger dauern, als durch die Option Wiederherstellungsintervall festgelegt wurde.If the system is shut down after the transaction has performed many uncommitted modifications, the recovery phase of the subsequent restart can take much longer than the time specified in the recovery interval option.
  • Das Protokoll kann sehr umfangreich werden, da das Protokoll nicht hinter der MinLSN abgeschnitten werden kann.The log might grow very large, because the log cannot be truncated past the MinLSN. Dies tritt auch dann auf, wenn die Datenbank das einfache Wiederherstellungsmodell verwendet, bei dem das Transaktionsprotokoll in der Regel bei jedem automatischen Prüfpunkt abgeschnitten wird.This occurs even if the database is using the simple recovery model, in which the transaction log is generally truncated on each automatic checkpoint.

Beginnend mit SQL Server 2019 (15.x)SQL Server 2019 (15.x) und in Azure SQL-DatenbankAzure SQL Database können Sie die Wiederherstellung von Transaktionen mit langer Laufzeit und die oben beschriebenen Probleme durch Verwenden der verbesserten Wiederherstellung von Datenbanken vermeiden.Starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x) and in Azure SQL-DatenbankAzure SQL Database, recovery of long-running transactions and the problems described above can be avoided by using Accelerated database recovery.

ReplikationstransaktionenReplication transactions

Der Protokolllese-Agent überwacht das Transaktionsprotokoll jeder für die Transaktionsreplikation konfigurierten Datenbank und kopiert die für die Replikation markierten Transaktionen aus dem Transaktionsprotokoll in die Verteilungsdatenbank.The Log Reader Agent monitors the transaction log of each database configured for transactional replication, and it copies the transactions marked for replication from the transaction log into the distribution database. Das aktive Protokoll muss alle Transaktionen enthalten, die für die Replikation markiert wurden, die jedoch noch nicht an die Verteilungsdatenbank übermittelt wurden.The active log must contain all transactions that are marked for replication, but that have not yet been delivered to the distribution database. Wenn diese Transaktionen nicht rechtzeitig repliziert werden, können sie die Kürzung des Protokolls verhindern.If these transactions are not replicated in a timely manner, they can prevent the truncation of the log. Weitere Informationen finden Sie unter Transaktionsreplikation.For more information, see Transactional Replication.

Weitere InformationenSee also

In den folgenden empfohlenen Artikeln und Büchern finden Sie zusätzliche Informationen zu Transaktionsprotokollen und bewährten Methoden für die Protokollverwaltung.We recommend the following articles and books for additional information about the transaction log and log management best practices.

Das Transaktionsprotokoll (SQL Server) The Transaction Log (SQL Server)
Verwalten der Größe der Transaktionsprotokolldatei Manage the size of the transaction log file
Transaktionsprotokollsicherungen (SQL Server) Transaction Log Backups (SQL Server)
Datenbankprüfpunkte (SQL Server) Database Checkpoints (SQL Server)
Konfigurieren der Serverkonfigurationsoption Wiederherstellungsintervall Configure the recovery interval Server Configuration Option
Verbesserte Wiederherstellung von Datenbanken Accelerated database recovery
sys.dm_db_log_info (Transact-SQL) sys.dm_db_log_info (Transact-SQL)
sys.dm_db_log_space_usage (Transact-SQL) sys.dm_db_log_space_usage (Transact-SQL)
Erläuterungen zu Protokollierung und Wiederherstellung in SQL Server von Paul Randal Understanding Logging and Recovery in SQL Server by Paul Randal
Verwaltung von SQL Server-Transaktionsprotokollen von Tony Davis und Gail ShawSQL Server Transaction Log Management by Tony Davis and Gail Shaw