and we said...
The definition of log_checkpoint_interval did not change significantly. In v8.0 it was:
LOG_CHECKPOINT_INTERVAL LOG_CHECKPOINT_INTERVAL specifies the frequency of checkpoints in terms of the number of
redo log file blocks that are written between consecutive checkpoints.
In Oracle8i, it is:
LOG_CHECKPOINT_INTERVAL LOG_CHECKPOINT_INTERVAL specifies the frequency of checkpoints in terms of the number of
redo log file blocks that can exist between an incremental checkpoint and the last block
written to the redo log. This number refers to physical operating system blocks, not
database blocks.
What this means is that in prior releases, whenever Oracle generated
log_checkpoint_interval number of redo blocks, it would start an interval checkpoint.
Starting with Oracle 8.1, log_checkpoint_interval will be interpreted to mean that the
incremental checkpoint should not lag the tail of the log by more than
log_checkpoint_interval number of redo blocks. This ensures that no more than
log_checkpoint_interval number of redo blocks will have to be read during recovery. It
helps in bounded recovery times.
So, for example, assume log_checkpoint interval is set to 1000. Oracle continually
calculates the address of redo record that was written 1000 records (OS blocks) ago. In
order to satisfy this parameter, the checkpoint position must advance at least as far as
this redo record. Should the checkpoint position point to a redo record written earlier
than this target position (written over 1000 records before the record at the end of the
log), Oracle will write dirty buffers and advance the checkpoint until it points at a
redo record written less than 1000 records ago. Should the checkpoint position point to
a redo record newer than this target position (written less than 1000 records ago),
Oracle will do nothing to satisfy this target for it is already satisfied.
Now for log_checkpoint_timeout the definition was: LOG_CHECKPOINT_TIMEOUT
LOG_CHECKPOINT_TIMEOUT specifies the maximum amount of time
before another checkpoint occurs. The value is specified in seconds. The time begins at
the start of the previous checkpoint, then a checkpoint occurs after the amount of time
specified by this parameter.
and is now: LOG_CHECKPOINT_TIMEOUT
LOG_CHECKPOINT_TIMEOUT specifies that the incremental checkpoint is at the position where
the last write to the redo log (sometimes called the "tail of the log") was integer
seconds ago. This parameter also signifies that no buffer will remain dirty (in the
cache) for more than integer seconds. The value is specified in seconds.
What this means is that in prior releases, every log_checkpoint_timeout seconds, Oracle
started an interval checkpoint. Starting with Oracle 8.1, log_checkpoint_timeout will be
interpreted to mean that the incremental checkpoint should be at the log position where
the tail of the log was log_checkpoint_timeout seconds ago. In other words, the
incremental checkpoint should lag the tail of the log by no more than
log_checkpoint_timeout seconds worth of redo.
So for example:
Assume the log_checkpoint_timeout is set to 60. Oracle continually calculates the
address of the redo record that was written 60 seconds ago. In order to satisfy this
parameter, the checkpoint position must advance at least as far as this redo record.
Should the checkpoint position point to a redo record older than this target position
(written over 60 seconds ago), Oracle will write dirty buffers and advance the checkpoint
until it points at a redo record written less than 60 seconds ago. Should the checkpoint
position point to a redo record newer than
this target position (written less than 60 seconds ago), Oracle will do nothing to
satisfy this target for it is already satisfied. In prior releases, this was more of a
'timer' and a checkpoint would happen every N seconds.