Checkpointing with long-running transactions
How a long-running transaction affects reuse of log files.
Figure 1 shows how a long-running transaction affects reuse of log files. In the example, a long-running transaction has made an entry to the log, shown as LR 1, after the first checkpoint shown. The transaction does not complete (at point LR 2) until after the third checkpoint. All the log information from LR 1 onwards is retained to allow recovery of that transaction, if necessary, until it has completed.
After the long-running transaction has completed, at LR 2, the head of the log logically moves to Checkpoint 3, the latest logged checkpoint. The files containing log records before Checkpoint 3, Head 2, are no longer needed. If we are using circular logging, the space can be reused.
If the primary log files are completely full before the long-running transaction completes, secondary log files might be used to avoid the logs getting full.
Activities which are entirely under the control of the queue manager, for example checkpointing, are scheduled to try and keep the activity within the primary log.
However, when secondary log space is required to support behavior outside of the control of the queue manager (for example the duration of one of our transactions) the queue manager tries using any defined secondary log space, to allow that activity to complete.
If that activity does not complete by the time 80% of the total log space is in use, the queue manager initiates action to reclaim log space, regardless of the fact that this has an impact on the application.
When the log head is moved and we are using circular logging, the primary log files might become eligible for reuse and the logger, after filling the current file, reuses the first primary file available to it. If we are using linear logging, the log head is still moved down the active pool and the first file becomes inactive. A new primary file is formatted and added to the bottom of the pool in readiness for future logging activities.
Parent topic: Use checkpointing to ensure complete recovery