Lines Matching refs:checkpoint
302 size of a checkpoint to be slightly less than a half the log.
304 Apart from this size requirement, a checkpoint transaction looks no different
307 perspective, the checkpoint transaction is also no different - just a lot
311 Because the checkpoint is just another transaction and all the changes to log
314 minimise the time we hold the CIL locked while writing the checkpoint
318 per-checkpoint context that travels through the log write process through to
319 checkpoint completion.
321 Hence a checkpoint has a context that tracks the state of the current
322 checkpoint from initiation to checkpoint completion. A new context is initiated
323 at the same time a checkpoint transaction is started. That is, when we remove
324 all the current items from the CIL during a checkpoint operation, we move all
325 those changes into the current checkpoint context. We then initialise a new
330 are formatting the checkpoint into the log. It also allows concurrent
334 checkpoint sequence order is maintained during log replay.
336 To ensure that we can be writing an item into a checkpoint transaction at
338 into the new CIL, then checkpoint transaction commit code cannot use log items
343 checkpoint context so that the log item can be released. In diagrammatic form,
364 And after the flush the CIL head is empty, and the checkpoint context log
390 start, while the checkpoint flush code works over the log vector chain to
391 commit the checkpoint.
393 Once the checkpoint is written into the log buffers, the checkpoint context is
398 checkpoint context.
409 vectors in one checkpoint transaction. I'd guess this is a "measure and
430 As discussed in the checkpoint section, delayed logging uses per-checkpoint
432 checkpoint. Because the switching of checkpoint contexts must be done
439 during the commit, we can assign the current checkpoint sequence. This allows
441 checkpoint sequence needs to be committed before they can continue. As a
443 the log forces to a specific checkpoint.
445 To ensure that we can do this, we need to track all the checkpoint contexts
446 that are currently committing to the log. When we flush a checkpoint, the
448 checkpoint commit completes, it is removed from the committing list. Because
449 the checkpoint context records the LSN of the commit record for the checkpoint,
470 and push if required. Indeed, placing the current sequence checkpoint flush in
478 The big issue for a checkpoint transaction is the log space reservation for the
479 transaction. We don't know how big a checkpoint transaction is going to be
483 still need to reserve the space in the log for the checkpoint.
510 relogged. This allows for a checkpoint reservation to only have to account for
516 large enough to handle arbitrary sized checkpoint transactions. This
517 reservation needs to be made before the checkpoint is started, and we need to
518 be able to reserve the space without sleeping. For a 8MB checkpoint, we need a
524 every checkpoint transaction completion. Unfortunately, if this space is not
544 Hence we can grow the checkpoint transaction reservation dynamically as items
547 checkpoint flush code.
555 checkpoint commit to complete. This background push is checked and executed by
589 insertion into the CIL, unpin on checkpoint completion". In other words, the
590 pinning and unpinning becomes symmetric around a checkpoint context. We have to
593 can be multiple outstanding checkpoint contexts, we can still see elevated pin
594 counts, but as each checkpoint completes the pin count will retain the correct
597 Just to make matters more slightly more complex, this checkpoint level context
661 The final serialisation point is the checkpoint commit record ordering code
662 that is run as part of the checkpoint commit and log force sequencing. The code
672 events they are waiting for are different. The checkpoint commit record
673 sequencing needs to wait until checkpoint contexts contain a commit LSN
675 sequencing needs to wait until previous checkpoint contexts are removed from
761 attach checkpoint context to log buffer