检查点checkpoint

检查点进程确保脏缓冲区能够最终被写回磁盘。ORACLE使用CKPT后台进程或者LGWR进程来触发检查点。

检查点通过定期将脏缓冲区强制写回的手段来确保这些缓冲区被写回磁盘。

检查点进程有两种运行方式:快速检查点标准检查点

对于标准检查点,DBWR进程只在每次被激活时写回少量的缓冲区,这种类型的检查点执行的时间更长,但对系统的影响较小。

对于快速检查点,DBWR进程每次被激活时需要写回大量的缓冲区,采用这类型检查点时系统运行更快,而且在I/O方面更有效率,但在执行检查点时对系统性能的影响较大。

可以通过控制两次执行检查点间隔的时间来提高实例恢复的效率,经常性地执行检查点可以减少故障时恢复系统的时间。

触发检查点:

  • 日志切换(重做日志文件或文件组被写满时,将切换到下一个重做日志文件)
  • 关闭数据库(shutdown immediate; shutdown normal;)
  • 强行执行检查点(alter system checkpoint;)
  • 强行执行日志切换(alter system switch logfile;)
  • alter tablespace ... offline;(alter database datafile N offline并不会出发检查点进程。而只有offline tablespace的时候才会触发检查点。因此如果offline datafile一段时间后,再次online需要进行media recovery。)
  • 当符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target参数设置的时候。
  • 当运行alter tablespace ... begin backup,end backup的时候

LOG_CHECKPOINT_INTERVAL:日志切换以前可以使用的操作系统块的数目。

e.g.如果重做日志文件大小为10M,并希望检查点间隔为重做日志文件的十分之一,则

LOG_CHECKPOINT_INTERVAL=1M / 512(bytes/block) = 2048 blocks  (大部分操作系统的块大小为512bytes)

 因此,当重做日志写了2048个块时会触发checkpoint。


LOG_CHECKPOINT_TIMEOUT:指定检查点发生的时间间隔,单位为秒。检查点将按这一时间间隔自动运行。

e.g.若想检查点每10分钟自动运行一次,可以设置

LOG_CHECKPOINT_TIMEOUT=600









你可能感兴趣的:(oracle,checkpoint,CKPT)