checkpoint not completed解决

最近公司数据库alert log总是报 checkpoint not completed.

不包括硬件问题,解决这个问题需要从三个方面入手:

1.checkpoint是什么?

2.产生此错误的机制?

3.解决方法

1.checkpoint是什么?

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

每隔3秒钟,CKPT进程就会将有关数据存储在control file中,来标志、验证当recovery开始时online redo log file对应的位置。checkpoint 的目的是为了保证在之前的时间点database buffer cache中的缓冲数据已经全部被写入datafiles。这个checkpoint 也是在实例失败时database recovery的位置。checkpoint信息由CKPT进程来写入,内容包括checkpoint的位置,SCN号,begin recovery时在online 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 completed" 的信息。

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

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

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

[@more@]

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

转载于:http://blog.itpub.net/16298743/viewspace-1054920/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值