CKPT、DBWn、LGWR都有3S的触发条件,但具体触发内容是不尽相同的。
LGWR每3S触发一次,将REDO BUFFER内容写入REDO LOG GROUP;
CKPT每3S会触发一次,它完成两个任务:1、告诉DBWn进程,写脏数据将要写到哪个位置,但不触发DBWn;2、更新控制文件关于DBWn进程写入脏数据的进度;
DBWn 触发条件中也有个每3S醒来一次,完成向数据文件写入脏数据的操作,但这里3S应该与CKPT的3S触发条件不是一回事;
[@more@]
CKPT中的3秒和增量检查点不是一个概念,3秒只是在控制文件中,ckpt 进程去更新当前 dbwr写到哪里了,这个对于 ckpt 进程来说叫 heartbeat ,heartbeat是3秒一次,3秒可以看作不停的检查并记录检查点执行情况(DBWR的写进度)。
完全检查点是由ckpt进程等待dbwr进程写入dirty queue在某个scn之前的所有数据, 所以会有一个瞬时的io比较大的倾向..
增量检查点, 是dbwr根据相关参数的设置来检查需要写入的dirty queue上的block, ckpt进程在增量检查点的时候记录dbwr最近写数据块的时候的对应的scn, 增量检查点不会等待dbwr的写操作(或者说dbwr的写操作是不受增量检查点控制的).
完全检查点的触发条件有:
1、数据库干净的关闭
2、当通过设置初始化参数LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT 和FAST_START_IO_TARGET 强制时;
3、ALTER SYSTEM CHECKPOINT
4、表空间脱机;
5、ALTER SYSTEM SWITCH LOGFILE
一般正常运行期间的数据库不会产生完全检查点,下面很多事件将导致增量检查点,发出这样的命令:
l ALTER TABLESPACE tablespace_name BIGEN BACKUP & end backup;
l ALTER TABLESPACE tablespace_name READ ONLY;
l ALTER TABLESPACE tablespace_name OFFLINE NORMAL;
等命令都会触发增量检查点。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16712909/viewspace-1022533/
,如需转载,请注明出处,否则将追究法律责任。