什么是checkpoint?
checkpoint是一个数据库事件它将已修改的数据从高速缓存刷新到磁盘并更新控制文件和数据文件
什么时候发生checkpoint?
我们知道了checkpoint会刷新髒数据但什么时候会发生checkpoint呢?以下几种情况会触发checkpoint
当发生日志组切换的时候
当符合LOG_CHECKPOINT_TIMEOUTLOG_CHECKPOINT_INTERVALfast_start_io_targetfast_start_mttr_target参数设置的时候
当运行ALTER SYSTEM SWITCH LOGFILE的时候
当运行ALTER SYSTEM CHECKPOINT的时候
当运行alter tablespace XXX begin backupend backup的时候
当运行alter tablespace datafile offline的时候;
增量检查点(incremental checkpoint)
oracle以后推出了incremental checkpoint的机制在以前的版本里每次checkpoint时都会做一个full thread checkpoint这样的话所有髒数据会被写到磁盘巨大的i/o对系统性能带来很大影响为了解决这个问题oracle引入了 checkpoint queue机制每一个髒块会被移到检查点队列里面去按照low rdb(第一次对此块修改对应的redo block address)来排列靠近检查点队列尾端的数据块的low rba值是最小的而且如果这些赃块被再次修改后它在检查点队列里的顺序也不会改变这样就保证了越早修改的块越早写入磁盘每隔秒钟ckpt会去更新控制文件和数据文件记录checkpoint执行的情况
数据字典
完全检查点
select * from X$KCCRT where indx=;
这里显示了上一次的完全检查点是在// ::发生所以我们推断// ::发生了一次日志切换再去操作系统上去看生产的归档果然有一个归档生产
rwr oracle oinstall Jun : _dbf
增量检查点
SQL> select * from X$KCCCP where indx=;
这里显示了lowrbaondisk rbacheckpoint time等信息 |