ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 对“checkpoint not completed!”的理解 (zt)

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

原创 Linux操作系统 作者:tolywang 时间:2007-07-26 00:00:00 0 删除 编辑



假设数据库存在两个日志组log1和log2,首先,-->log1-->log2-->log1,此时(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

代码:

SQL
> connect sys/richel@testdb as sysdba; Connected. SQL> archive log list; Database log mode Archive Mode
Automatic archival Enabled
Archive destination D
:
oracleoradataaxisoft2archive
Oldest online log sequence 383
Next log sequence to archive 385
Current log sequence 385

SQL
> alter system archive log stop
;
System altered
.
SQL> archive log
list; Database log mode Archive Mode
Automatic archival Disabled
Archive destination D
:
oracleoradataaxisoft1archive
Oldest online log sequence 3
Next log sequence to archive 7
Current log sequence 7

SQL
> SELECT COUNT(*) FROM richel.test
;

COUNT
(*)
----------
6000

SQL
> insert into richel.test select * from richel.test
;
6000 rows created
.
SQL> insert into richel.test select * from richel.test
;
12000 rows created
. SQL> insert into richel.test select * from richel.test;
(
此时系统hang,查看alert,发现上述警告信息。
)
开启另一个会话:
SQL
> alter system archive log group 1
;
System altered
.
而后,插入得以继续完成。

SQL
> commit
;
Commit complete
.


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

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

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

假设数据库存在两个日志组log1和log2,首先,-->log1-->log2-->log1,此时(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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    14332131