ORACLE
CHECKPOINT
Basic purpose of Checkpoint:
Database
blocks are temporarily stored in Database buffer cache. Once the database blocks are read,
they will be stored in the DB buffer cache so that if any other user accesses the same data later point of time,
the data will be available in memory and this will avoid the Disk reads.
When we update
any row, the buffer in DB buffer cache corresponding to the block containing
that row is updated in memory. Record of the change made is kept in redo log
buffer . On commit, the changes will be written to the disk thereby making
them permanent.
But where are those changes written? Is it to the datafiles
containing data blocks? No !!! The changes are recorded in online redo log
files by flushing the contents of redo log buffer to them.This is called write
ahead logging. If the instance crashed right now, the DB buffer cache
will be wiped out but on restarting the database, Oracle will apply the changes
recorded in redo log files to the datafiles.
Why
doesn’t Oracle write the changes to datafiles right away when we commit the
transaction? The reason is simple. If it chose to write directly to the
datafiles, it will have to physically locate the data block in the datafile
first and then update it which means that after committing, user has to wait
until DBWR searches for the block and then writes it before he can issue next
command. This will bring down the performance drastically. That is where the
role of redo logs comes in. The writes to the redo logs are sequential writes –
LGWR just dumps the info in redologs to log files sequentially and
synchronously so that the user does not have to wait for long. Moreover, DBWR
will always write in units of Oracle blocks whereas LGWR will write only the
changes made. Hence, write ahead logging also improves performance by
reducing the amount of data written synchronously.
When will the changes
be applied to the datablocks in datafiles? The data blocks in the datafiles
will be updated by the DBWR asynchronously in response to certain triggers.
These triggers are called checkpoints.
Checkpoint is a
synchronization event at a specific point in time which causes some / all dirty
blocks to be written to disk thereby guaranteeing that blocks dirtied prior to
that point in time get written.
Whenever
dirty blocks are written to datafiles, it allows oracle :
- to reuse a redo log : A redo log can’t be reused until DBWR writes all the dirty blocks protected by that logfile to disk. If we attempt to reuse it before DBWR has finished its checkpoint, we get the following message in alert log : Checkpoint not complete.
- to reduce instance recovery time : As the memory available to a database instance increases, it is possible to have database buffer caches as large as several million buffers. It requires that the database checkpoint advance frequently to limit recovery time, since infrequent checkpoints and large buffer caches can exacerbate crash recovery times significantly.
- to free buffers for reads : Dirtied blocks can’t be used to read new data into them until they are written to disk. Thus DBWrR writes dirty blocks from the buffer cache, to make room in the cache.
- Full checkpoint
- Thread checkpoint
- File checkpoint
- Parallel Query checkpoint
- Object checkpoint
- Log switch checkpoint
- Incremental checkpoint
- DBWR writes some /all dirty blocks to datafiles
- CKPT process updates the control file and datafile headers
FULL CHECKPOINT
Writes block images to
the database for all dirty buffers from all instances.
· Statistics updated
- DBWR checkpoints
- DBWR checkpoint buffers written
- DBWR thread checkpoint buffers written
· Caused by:
Alter system
checkpoint [global]
Alter database begin
backup
Alter database close
Shutdown [immediate]
Controlfile and
datafile headers are updated
Checkpoint_change#
THREAD CHECKPOINT
Writes block images
to the database for all dirty buffers from one instance
Statistics updated
- DBWR checkpoints
- DBWR checkpoint buffers written
- DBWR thread checkpoint buffers written
Caused by :
- Alter system checkpoint local
- Controlfile and datafile headers are updated
- Checkpoint_change#
FILE CHECKPOINT
- When a tablespace is put into backup mode or take it offline, oracle writes all the dirty blocks from the tablespace to disk before changing the state of the tablespace.
- Writes block images to the database for all dirty buffers for all files of a tablespace from all instances
Statistics updated
- DBWR checkpoints
- DBWR tablespace checkpoint buffers written
- DBWR checkpoint buffers written
Caused by :
- Alter tablespace xxx offline
- Alter tablespace xxx begin backup
- Alter tablespace xxx read only
- Controlfile and datafile headers are updated
- Checkpoint_change#
PARALLEL QUERY CHECKPOINT
Parallel
query often results in direct path reads (Full tablescan or index fast full
scan). This means that blocks are read straight into the session’s PGA,
bypassing the data cache; but that means if there are dirty buffers in the data
cache, the session won’t see the most recent versions of the blocks unless they
are copied to disk before the query starts – so parallel queries start with a
checkpoint.
Writes block images to the database for all dirty buffers belonging to objects accessed by the query from all instances.
Statistics updated
- DBWR checkpoints
- DBWR checkpoint buffers written
Caused by :
- Parallel Query
- Parallel Query component of Parallel DML (PDML) or Parallel DDL (PDDL)
- Mandatory for consistency
- Controlfile and datafile headers are updated
- Checkpoint_change#
OBJECT CHECKPOINT
When an object
is dropped/truncated, the session initiates an object checkpoint telling DBWR
to copy any dirty buffers for that object to disk and the state of those
buffers is changed to free.
Writes block images
to the database for all dirty buffers belonging to an object from all
instances.
Statistics updated
- DBWR checkpoints
- DBWR object drop buffers written
Caused by dropping
or truncating a segment:
- Drop table XXX
- Drop table XXX Purge
- Truncate table xxx
- Drop index xxx
Mandatory for media
recovery purposes
- Controlfile and datafile headers are updated
- Checkpoint_change#
LOG SWITCH CHECKPOINT
Writes the contents
of the dirty buffers whose information is protected by a redo log to the
database .
Statistics updated
- DBWR checkpoints
- DBWR checkpoint buffers written
- background checkpoints started
- background checkpoints completed
- Caused by log switch
- Controlfile and datafile headers are updated
- Checkpoint_change#
INCREMENTAL CHECKPOINT
Prior to Oracle
8i, only well known checkpoint was log switch checkpoint. Whenever LGWR filled
an online logfile, DBWR would go into a frenzy writing data blocks to disks,
and when it had finished, Oracle would update each data file header block with
the SCN to show that file was updated up to that point in time.
