Lines Matching refs:checkpoint
591 size of a checkpoint to be slightly less than a half the log.
593 Apart from this size requirement, a checkpoint transaction looks no different
596 perspective, the checkpoint transaction is also no different - just a lot
600 Because the checkpoint is just another transaction and all the changes to log
603 minimise the time we hold the CIL locked while writing the checkpoint
607 per-checkpoint context that travels through the log write process through to
608 checkpoint completion.
610 Hence a checkpoint has a context that tracks the state of the current
611 checkpoint from initiation to checkpoint completion. A new context is initiated
612 at the same time a checkpoint transaction is started. That is, when we remove
613 all the current items from the CIL during a checkpoint operation, we move all
614 those changes into the current checkpoint context. We then initialise a new
619 are formatting the checkpoint into the log. It also allows concurrent
623 checkpoint sequence order is maintained during log replay.
625 To ensure that we can be writing an item into a checkpoint transaction at
627 into the new CIL, then checkpoint transaction commit code cannot use log items
632 checkpoint context so that the log item can be released. In diagrammatic form,
653 And after the flush the CIL head is empty, and the checkpoint context log
679 start, while the checkpoint flush code works over the log vector chain to
680 commit the checkpoint.
682 Once the checkpoint is written into the log buffers, the checkpoint context is
687 checkpoint context.
698 vectors in one checkpoint transaction. I'd guess this is a "measure and
720 As discussed in the checkpoint section, delayed logging uses per-checkpoint
722 checkpoint. Because the switching of checkpoint contexts must be done
729 during the commit, we can assign the current checkpoint sequence. This allows
731 checkpoint sequence needs to be committed before they can continue. As a
733 the log forces to a specific checkpoint.
735 To ensure that we can do this, we need to track all the checkpoint contexts
736 that are currently committing to the log. When we flush a checkpoint, the
738 checkpoint commit completes, it is removed from the committing list. Because
739 the checkpoint context records the LSN of the commit record for the checkpoint,
760 and push if required. Indeed, placing the current sequence checkpoint flush in
769 The big issue for a checkpoint transaction is the log space reservation for the
770 transaction. We don't know how big a checkpoint transaction is going to be
774 still need to reserve the space in the log for the checkpoint.
801 relogged. This allows for a checkpoint reservation to only have to account for
807 large enough to handle arbitrary sized checkpoint transactions. This
808 reservation needs to be made before the checkpoint is started, and we need to
809 be able to reserve the space without sleeping. For a 8MB checkpoint, we need a
815 every checkpoint transaction completion. Unfortunately, if this space is not
835 Hence we can grow the checkpoint transaction reservation dynamically as items
838 checkpoint flush code.
846 checkpoint commit to complete. This background push is checked and executed by
881 insertion into the CIL, unpin on checkpoint completion". In other words, the
882 pinning and unpinning becomes symmetric around a checkpoint context. We have to
885 can be multiple outstanding checkpoint contexts, we can still see elevated pin
886 counts, but as each checkpoint completes the pin count will retain the correct
889 Just to make matters slightly more complex, this checkpoint level context
954 The final serialisation point is the checkpoint commit record ordering code
955 that is run as part of the checkpoint commit and log force sequencing. The code
965 events they are waiting for are different. The checkpoint commit record
966 sequencing needs to wait until checkpoint contexts contain a commit LSN
968 sequencing needs to wait until previous checkpoint contexts are removed from
1055 attach checkpoint context to log buffer