ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Checkpoint not complete

Checkpoint not complete

原创 Linux操作系统 作者:learninfly 时间:2009-07-21 10:22:54 0 删除 编辑

这个错误非常常见,网上亦有一堆关于此的论述。在此写的目的只是希望自己能够更加详细的分析出前因后果,而不只是结论。

写这个问题需要从三个方面入手:1.checkpoint是什么?2.产生此错误的机制?3.解决方法

1.checkpoint是什么?

checkpoint负责:通知DBWn进程;update数据文件头;update控制文件。

每隔3秒钟,CKPT进程就会将有关数据存储在control file中,来标志、验证当recovery开始时online redo log file对应的位置。checkpoint 的目的是为了保证在之前的时间点database buffer cache中的缓冲数据已经全部被写入data files。这个checkpoint position也是在实例失败时database recovery的位置。checkpoint信息由CKPT进程来写入,内容包括checkpoint的位置,SCN号,begin recovery时在on line redo log file中的位置,关于日志的信息等等。总而言之,checkpoint发生的目的就是要把储存在buffer內的已提交交易写到disk,否则一旦发生crash,需要进行recovery时,你就必须花很多的时间从redo log file內最后的SCN交易开始进行recovery,这样是很浪费时间的。

2.产生错误的机制?

首先,需要清楚触发checkpoint的机制:

1).当发生日志组切换的时候。
2).当符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target参数设置的时候。
3).当运行ALTER SYSTEM SWITCH LOGFILE的时候。
4).当运行ALTER SYSTEM CHECKPOINT的时候。
5).当运行alter tablespace XXX begin backup,end backup的时候。
6).当运行alter tablespace ,datafile offline的时候。

当日志组切换的时候,此时触发CKPT开始干活,同时通知DBWn进程开始将buffer中的数据写入data file中。日志组切换必然需要重用日志文件,但是DBWn写的太慢,导致LGWR长时间等待,估计不耐烦了,于是发出"Checkpoint not complete" 的信息。

发生的原因主要涉及以下几个方面:

checkpoint发生的太频繁了;checkpoint活干的太慢;DBWR写的也太慢。

3、解决方法
1).  使checkpoint进程有更多的工作时间,相应地:
a. 增大redo log的大小
b. 增加redo log组的数量
2). 使checkpoint发生的不那么频繁、使checkpoint工作的更有效率。涉及checkpoint的几个参数。
3). 使DBWR工作的更有效率:
a. 可能的话一定要开异步IO
b. 增大db_writer_processes

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10322123/viewspace-609792/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 写序
请登录后发表评论 登录
全部评论

注册时间:2009-07-21

  • 博文量
    38
  • 访问量
    38252