123
返回列表 发新帖
楼主: yywudong

[原创] 假如log file switch没有产生checkpoint,会产生什么情况?

[复制链接]
论坛徽章:
3
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
21#
发表于 2008-3-13 09:30 | 只看该作者
原帖由 hanson 于 2008-3-12 23:11 发表


这应该是增量检查点。oracle官方教材上已经说明白的。
你可以将log_checkpoints_to_alert设置为true,然后不对数据库进行任何的操作,而仅仅是尝试进行日志切换,然后检查alert.log,你会发现检查点完成的时间会很长,从而甚至导致出现Checkpoint not complete。这就是因为增量检查点优先级较低导致的。如果是完全检查点,它的优先级是最高的,不会导致Checkpoint not complete的出现。

如果日志切换不进行增量检查点,那想象一下,当前数据库里一个脏块也没有,同时fast_start_mttr_target也设置的很大。
目前数据库里有2组日志文件,它们全是空的,没有redo entry。
然后我修改一条记录,并提交,从而在1号日志文件里产生了redo。然后手工进行日志切换到2号日志文件,然后再次手工切换到1号日志文件。如果不发生检查点,也就是没有将checkpoint queue上第一个脏块所对应的LRBA作为CKPT Position而写入控制文件,那oracle如何知道这时1号日志文件里包含的redo所对应的脏块还没有写入数据文件呢?它也没有办法知道是否应该覆盖1号日志文件。因此一旦发生日志切换,就必须触发检查点,从而将checkpoint Position放入到1号日志文件里去。


1、能否把你看到的oracle官方教材的内容发一下看看。
2、我想讨论问题的是“手工切换日志是增量检查点还是完全检查点”,至于切换日志会产生检查点这一点是确定无疑的。
3、我刚才看了一下checkpoint instructors.ppt,上面说产生完全检查点有两个条件:
a. alter system checkpoint   b.shutdown(except abort)
按照他这个结论来看,手工切换日志确实也是增量检查点。看来是我的理解有些偏差。

使用道具 举报

回复
论坛徽章:
14
奥运会纪念徽章:自行车
日期:2008-04-25 21:00:142013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14奥运会纪念徽章:皮划艇激流回旋
日期:2012-08-13 10:25:38鲜花蛋
日期:2012-02-10 11:40:172010新春纪念徽章
日期:2010-03-01 11:04:58授权会员
日期:2010-01-12 09:40:47ITPUB元老
日期:2010-01-12 09:33:092009新春纪念徽章
日期:2009-01-04 14:52:28奥运会纪念徽章:拳击
日期:2008-10-24 13:22:33
22#
发表于 2008-3-13 09:39 | 只看该作者
原帖由 cqubityj 于 2008-3-12 17:59 发表


如果alter system switch logfile也是增量检查点的话,会有问题。考虑一下频繁手工切换日志情况:
先假设手工切换日志也是增量检查点,即dbwr不一定写出dirty块。
有两个在线日志A和B,假设都是100M,当前正在写的日志是A并且A只写1k。同时假设检查点队列的开始RBA这时也在A中。这时手工切换日志,当前日志变成B。B写了1k后,我马上又切换日志,这时就需要重用A了。如果在这期间没有触发dbwr去写dirty块的话,那么就无法重用A了。这时检查点队列中的内容只有2K,肯定小于100M*0.9。所以target rba规则在这段时间内是不能触发dbwr写的。
而如果手工切换是完全检查点的话,就没这个问题了。切换时就触发dbwr写了,以前的日志就可以重用了。


我分析在你假设的情况下,90% logfile=0.9K。当手工切换时,最小的日志文件应该等于其归档日志大小。因为这个规则的目的在于(引用):The checkpoint position will never lag the end of the log data by more than one log file。

手工switch不即时写 可以体现在:
当执行alter system switch logfile后,在alter 文件中马上可以看到:Beginning log switch checkpoint up to RBA [0x1c39.2.10]之类的提示,在短时间后可以看到Completed checkpoint up to RBA [0x1c38.2.10],但Completed checkpoint up to RBA [0x1c39.2.10]则很久也看不到。这说明drwr没有即刻把up to RBA [0x1c39.2.10]的数据块写出,它仍然遵守之前的写出规则。

使用道具 举报

回复
论坛徽章:
3
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
23#
发表于 2008-3-13 10:12 | 只看该作者
原帖由 solearn 于 2008-3-13 09:39 发表


我分析在你假设的情况下,90% logfile=0.9K。当手工切换时,最小的日志文件应该等于其归档日志大小。因为这个规则的目的在于(引用):The checkpoint position will never lag the end of the log data by more than one log file。

手工switch不即时写 可以体现在:
当执行alter system switch logfile后,在alter 文件中马上可以看到:Beginning log switch checkpoint up to RBA [0x1c39.2.10]之类的提示,在短时间后可以看到Completed checkpoint up to RBA [0x1c38.2.10],但Completed checkpoint up to RBA [0x1c39.2.10]则很久也看不到。这说明drwr没有即刻把up to RBA [0x1c39.2.10]的数据块写出,它仍然遵守之前的写出规则。


你这个说法我还是有疑问。因为我什么时候去手工切换日志数据库是不可能预测的。假如我在A日志写了1K的时候手工切换,如果是按照90% logfile=0.9K,那么在0.9K时就该触发dbwr写了。而这个1K是在我切换的时候数据库才知道的,这时不是已经晚了吗。假设我是在2k的时候切换的,那么不是就要90% logfile=1.8K了。我觉得不太可能是这样的。

使用道具 举报

回复
论坛徽章:
23
生肖徽章:狗
日期:2006-09-07 10:14:43喜羊羊
日期:2015-03-13 17:41:592014年新春福章
日期:2014-04-10 09:43:05蛋疼蛋
日期:2012-05-23 22:26:07鲜花蛋
日期:2012-01-16 17:28:092012新春纪念徽章
日期:2012-01-04 11:51:22双黄蛋
日期:2011-12-21 09:05:53ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:猴
日期:2008-11-21 15:08:48
24#
发表于 2008-3-13 10:34 | 只看该作者
还在讨论啊.....精神可嘉

使用道具 举报

回复
论坛徽章:
14
奥运会纪念徽章:自行车
日期:2008-04-25 21:00:142013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14奥运会纪念徽章:皮划艇激流回旋
日期:2012-08-13 10:25:38鲜花蛋
日期:2012-02-10 11:40:172010新春纪念徽章
日期:2010-03-01 11:04:58授权会员
日期:2010-01-12 09:40:47ITPUB元老
日期:2010-01-12 09:33:092009新春纪念徽章
日期:2009-01-04 14:52:28奥运会纪念徽章:拳击
日期:2008-10-24 13:22:33
25#
发表于 2008-3-13 11:12 | 只看该作者
原帖由 cqubityj 于 2008-3-13 10:12 发表


你这个说法我还是有疑问。因为我什么时候去手工切换日志数据库是不可能预测的。假如我在A日志写了1K的时候手工切换,如果是按照90% logfile=0.9K,那么在0.9K时就该触发dbwr写了。而这个1K是在我切换的时候数据库才知道的,这时不是已经晚了吗。假设我是在2k的时候切换的,那么不是就要90% logfile=1.8K了。我觉得不太可能是这样的。


其实这个说法我也有疑问。我也是猜测:当命令发出后,oracle 才知道这个文件的 大小是1K,才确定了新的target rba从而促使dbwr去写。如果不这样假设,我找不到一个理由来解释上面所说在alert文件里看到的现象(我也没有找到相关资料)。

使用道具 举报

回复
论坛徽章:
0
26#
 楼主| 发表于 2008-3-14 08:39 | 只看该作者
感谢晶晶小妹的指正,
   还有楼上各位对checkpoint的相关讨论,让我又学了不少。但alter system switch logfile到底产生的是不是增量检查点?希望能提供较有说服力的资料,先谢了。
还有一个问题alter system switch logfile与alter system checkpoint 产生的检查点是一样的吗?

使用道具 举报

回复
论坛徽章:
16
ITPUB元老
日期:2005-04-27 08:46:182013年新春福章
日期:2013-02-25 14:51:242012新春纪念徽章
日期:2012-01-04 11:49:54鲜花蛋
日期:2011-12-27 22:39:17ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412010新春纪念徽章
日期:2010-03-01 11:20:51生肖徽章2007版:牛
日期:2009-07-13 12:53:13生肖徽章2007版:蛇
日期:2009-03-19 13:57:24生肖徽章2007版:牛
日期:2008-12-17 10:30:43奥运会纪念徽章:足球
日期:2008-10-24 13:28:14
27#
发表于 2008-3-14 08:53 | 只看该作者
原帖由 yywudong 于 2008-3-14 08:39 发表
感谢晶晶小妹的指正,
   还有楼上各位对checkpoint的相关讨论,让我又学了不少。但alter system switch logfile到底产生的是不是增量检查点?希望能提供较有说服力的资料,先谢了。
还有一个问题alter system switch logfile与alter system checkpoint 产生的检查点是一样的吗?



官方教材的 9i DBA II 第7章 18页
已经明确指出full checkpoint发生的时机:
·SHUTDOWN NORMAL, IMMEDIATE, or TRANSACTIONAL
·ALTER SYSTEM CHECKPOINT

反推导,其他的都不属于full checkpoint。

前面已经讲到如何做试验来验证它了。就是你将checkpoint跟踪到alert.log文件里。然后进行日志切换,你会发现日志切换引起的checkpoint的时间完成很长,从而导致将checkpoint not complete记录到alert.log里。这就是因为增量检查点的优先级较低导致。

使用道具 举报

回复
论坛徽章:
24
授权会员
日期:2006-12-23 13:14:362008新春纪念徽章
日期:2008-02-13 12:43:03数据库板块每日发贴之星
日期:2008-02-16 01:05:15ITPUB元老
日期:2008-02-19 22:12:27行业板块每日发贴之星
日期:2008-02-29 01:06:00开发板块每日发贴之星
日期:2008-03-03 01:05:35ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41紫蛋头
日期:2012-11-28 16:41:42
28#
发表于 2008-3-14 08:53 | 只看该作者
刚看到这么精彩的话题,学习了.

使用道具 举报

回复
论坛徽章:
0
29#
 楼主| 发表于 2008-3-26 18:44 | 只看该作者
更新了一下,请大家多多赐教。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表