As we know, The transaction log is used to guarantee the data integrity of the database and for data recovery. The transaction log in a database maps over one or more physical files. Conceptually, the log file is a string of log records. Physically, the sequence of log records is stored efficiently in the set of physical files that implement the transaction log. There must be at least one log file for each database.
The
SQL Server Database Engine divides each physical log file internally into a
number of virtual log files. Virtual log files have no fixed size, and there is
no fixed number of virtual log files for a physical log file. The
Database Engine chooses the size of the virtual log files dynamically while it
is creating or extending log files. The Database Engine tries to maintain a
small number of virtual files. 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. The size or number of virtual log files cannot be
configured or set by administrators.
The only time virtual log files affect
system performance is if the physical log files are defined by small size and growth_increment values. The size value is the initial size for the log
file and the growth_increment value is the amount of space added to
the file every time new space is required. If the log files grow to a large
size because of many small increments, they will have many virtual log files.
This can slow down database startup and also log backup and restore operations.
We recommend that you assign log files size value close to the final size
required, also have a relatively large growth_increment value.
The
transaction log is a wrap-around file. For example, consider a database with
one physical log file divided into four virtual log files. When the database is
created, the logical log file begins at the start of the physical log file. New
log records are added at the end of the logical log and expand toward the end
of the physical log. Log truncation frees any virtual logs whose records all
appear in front of the minimum recovery log sequence number (MinLSN). The MinLSN is the log sequence number of the
oldest log record that is required for a successful database-wide rollback. The
transaction log in the example database would look similar to the one in the
following illustration.
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.
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.
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.
This
cycle repeats endlessly, as long as the end of the logical log never reaches
the beginning of the logical log. 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. However, if the end
of the logical log does reach the start of the logical log, one of two things
occurs:
·
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. For more information about the FILEGROWTH setting,
·
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.
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.
No comments:
Post a Comment