patternsqlMinor
How is an Active Log different from MinLSN?
Viewed 0 times
activelogdifferentminlsnhowfrom
Problem
MinLSN is the LSN of the oldest uncommitted transaction:
- What exactly does Active Log hold?
- Isn't it supposed to hold all the uncommitted transactions?
- Does it hold any other log records which are already committed?
- What happens to MinLSN and Active Log when a CHECKPOINT happens?
Solution
MinLSN is the LSN of the oldest uncommitted transaction.
This is not exactly true
LSN stands for Log Sequence Number.
Each log record has a LSN and each new log record is written to the logical end of the log with a higher LSN than the previous LSN.
Using this simplified Log Sequence:
Next LSNs will be 89, 90, ...
The Log Sequence Number of the first log record that is required to successfully perform a full recovery of the database is recorded in checkpoint records. This LSN is called Minimum recovery LSN or MinLSN.
MinLSN is the minimun of:
If we look at the above LSN records, MinLSN candidates are:
Therefore MinLSN is
The list of LSNs starting at MinLSN and up to the last recorded LSN is called the
You can see that the Active Log still contains already commited transactions (TRAN 1) because their LSNs are bigger than the MinLSN.
When a new checkpoint occurs and is recorded:
-
Checkpoint LOG record is created. Its LSN is compared to the LSN of the begining of the oldest active transaction:
This is not exactly true
LSN stands for Log Sequence Number.
Each log record has a LSN and each new log record is written to the logical end of the log with a higher LSN than the previous LSN.
Using this simplified Log Sequence:
LSN Log
80 Begin Tran 1
82 Begin Tran 2
83 Update Tran 2
84 Check Point
85 Update 1
86 Commit Tran 1
87 Check Point
88 Update Tran 2Next LSNs will be 89, 90, ...
The Log Sequence Number of the first log record that is required to successfully perform a full recovery of the database is recorded in checkpoint records. This LSN is called Minimum recovery LSN or MinLSN.
MinLSN is the minimun of:
- LSN of the beginning of the oldest active transaction
- LSN of the start of the last checkpoint
- LSN of the beginning of the oldest replication transaction that has not yet been replicated
If we look at the above LSN records, MinLSN candidates are:
- Oldest active transaction =
Begin Tran 2withLSN 82
- LSN of the last checkpoint =
LSN 87
Therefore MinLSN is
LSN 82.- What exactly does Active Log hold?
The list of LSNs starting at MinLSN and up to the last recorded LSN is called the
Active Log. Here Active log is composed of LSN 82 to 88. MinLSN is just the first LSN of the Active Log.- Isn't it suppose to hold all the uncommitted transactions?
- Does it hold any other log records which are already committed?
You can see that the Active Log still contains already commited transactions (TRAN 1) because their LSNs are bigger than the MinLSN.
- What happens to MinLSN and Active Log when a CHECKPOINT happens?
When a new checkpoint occurs and is recorded:
- LOG records linked to a Dirty page being written to disk are written from memory to disk before making any change to the page. This guarantees the successful recovery of the database before writing a page to disk. Since LOG are written sequentially, records in memory not related to the current page being written may have to be record before it.
- Dirty pages are written to disk (ie. all pages in memory that have been changed since the last checkpoint or since they were read from disk, however the status of the transactions),
-
Checkpoint LOG record is created. Its LSN is compared to the LSN of the begining of the oldest active transaction:
- If its LSN is smaller, it becomes the new MinLSN.
- Otherwise, the LSN of the oldest trasaction remains the MinLSN.
Code Snippets
LSN Log
80 Begin Tran 1
82 Begin Tran 2
83 Update Tran 2
84 Check Point
85 Update 1
86 Commit Tran 1
87 Check Point
88 Update Tran 2Context
StackExchange Database Administrators Q#127313, answer score: 2
Revisions (0)
No revisions yet.