对“checkpoint not completed!”的理解 (zt)

本文讨论了数据库日志组在切换过程中遇到的问题,特别是当检查点未完成时的情况。分析了不同场景下的解决策略,包括增加日志组数量、优化I/O性能等。



假设数据库存在两个日志组log1和log2,首先,-->log1--&gtlog2--&gtlog1,此时(log2切换到log1)触发checkpoint,该checkpoint will flush dirty block to datafile,从而触发DBWn书写dirty buffer,等到log1覆盖的dirty block全部被写入datafile后才能使用log1(循环使用),如果DBWn写入过慢,LGWR必须等待DBWn完成,则这时会出现“checkpoint not completed!”


作者:ZALBB 时间:04-09-28 16:42

我理解的比较简单:归档日志没数据库写日志快。比如:数据库有两组日志,日志1还在归档,
日志2已经被写满了,此时要覆盖日志1,但日志1还没被归档完毕(COPY完毕),结果就出现
此提示。

解决方法:增加日志组,多些缓冲时间,以便归档。

作者:biti_rainy 时间:04-09-28 16:58

是 lgwr等待将被覆盖的 logfile 对应的 dirty buffer 被写入数据文件,也就是io 繁忙导致 dbwr写太慢

作者:ZALBB 时间:04-09-28 17:52

quote: 最初由 biti_rainy 发布
是 lgwr等待将被覆盖的 logfile 对应的 dirty buffer 被写入数据文件,也就是io 繁忙导致 dbwr写太慢


若是这种解释,那就不是增加日志组可解决了。

作者:biti_rainy 时间:04-09-28 18:03

quote: 最初由 ZALBB 发布

若是这种解释,那就不是增加日志组可解决了。


如果大量的IO只是一个段时期的高峰,增加日志组可以延缓这个周期,从而可能会解决这个问题


如果你的系统永远都处于高峰期?那恐怕你需要使用更高速的存储设备和更好的主机

归档没完毕的提示信息是不一样的,当然归档没有完成通常也是IO问题

作者:nattyneat 时间:04-09-29 09:45

如果归档没有完成的话,Alert中提示如下:
Thread 1 cannot allocate new log, sequence 12
All online logs needed archiving

作者:Niy38 时间:04-09-29 14:08

Re: 对“checkpoint not completed!”的理解,欢迎大家讨论

quote: 最初由 nattyneat 发布对“checkpoint not completed!”的理解,欢迎大家讨论

假设数据库存在两个日志组log1和log2,首先,-->log1--&gtlog2--&gtlog1,此时(log2切换到log1)触发checkpoint,该checkpoint will flush dirty block to datafile,从而触发DBWn书写dirty buffer,等到log1覆盖的dirty block全部被写入datafile后才能使用log1(循环使用),如果DBWn写入过慢,LGWR必须等待DBWn完成,则这时会出现“checkpoint not completed!”


My understanding:
log1-> log2, trigger checkpoint 1
after log2 is full,
log2-> log1, trigger checkpoint 2
but if checkpoint 1 is still not finished, then LGWR must wait. This is "logfile switch (checkpoint incompleted)" event.

作者:Niy38 时间:04-09-29 14:11

quote: 最初由 ZALBB 发布我理解的比较简单:归档日志没数据库写日志快。比如:数据库有两组日志,日志1还在归档,
日志2已经被写满了,此时要覆盖日志1,但日志1还没被归档完毕(COPY完毕),结果就出现
此提示。

解决方法:增加日志组,多些缓冲时间,以便归档。


This is event "logfile switch ( archiving needed )", different
from "logfile switch ( checkpoint incomplete)"

作者:remen 时间:04-09-29 15:05

那么如果db是非归档模式,仅仅在高峰时间出现
Thread 1 cannot allocate new log, sequence 286857
Checkpoint not complete
这样的情况的话,应该如何解决呢?

作者:remen 时间:04-09-29 15:08

增加日志组??

作者:biti_rainy 时间:04-09-29 15:33

quote: 最初由 remen 发布那么如果db是非归档模式,仅仅在高峰时间出现
Thread 1 cannot allocate new log, sequence 286857
Checkpoint not complete
这样的情况的话,应该如何解决呢?


Checkpoint not complete
---------- 很明显,检查点没完成,增加日志组和日志文件大小,当然有限考虑io问题

作者:remen 时间:04-09-29 15:40

谢谢回复!
但是我们的系统平时大概18分钟切换一次日志,唯独在中午运行mrp计划的时候切换比较频繁,同时提示检查点无法完成,所以我觉得日志文件的大小应该差不多了,增加日志组才是首选,请问我的推断正确吗?

作者:biti_rainy 时间:04-09-29 16:05

难道有什么不正确的吗? 都到这个份上了干吗那么怀疑自己呢

作者:remen 时间:04-09-29 16:16

呵呵,谢谢!

作者:remen 时间:04-10-07 09:36

另外,如果出现Checkpoint not complete,会造成什么后果呢?
写日志的进程等待归档完成???那么再归档没完成之前的这段时间日志往哪个日志组写呢?
比如现在group 2写满了,要开始写group 1,但是1的归档还没完成,这个时候就出现了Checkpoint not complete,那么这个时候1是不能写的,那日志往哪里写呢?继续重用2??这样的话,2中的数据不就被覆盖了?它可还没有归档呢呀!

另外,上面讨论的都是归档模式下的,但是非归档呢?如果出现Checkpoint not complete意味着什么呢?DBWn速度太慢??

作者:biti_rainy 时间:04-10-07 11:19

Checkpoint not complete 那数据库就暂时地hang住了呗


非归档,当然是 dbwr 速度太慢(本质上就是io存在问题)

作者:remen 时间:04-10-07 11:30

谢谢!
既然这样,那么如果这时候数据库遭到破坏,需要利用归档日志来恢复,仅仅凭借这些日志能够完全恢复吗?
因为既然数据库hang住了,那么这段时间内发生的数据库的改变就没有地方可以写,也就造成了归档日志的不完整,对吗?

作者:biti_rainy 时间:04-10-07 11:39

ft

数据库hang住了,这段时间数据库能发生改变吗?无法产生任何日志!也就意味着数据库跟死了一样,普通用户都无法登陆!

所有时间均为 . 现在时间是 09:41.

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

转载于:http://blog.itpub.net/35489/viewspace-84823/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值