楼主: wxz317

对于Oracle12C的多LGWR的理解,纯属个人想法,如有错误请指正,如有雷同纯属巧合!

[复制链接]
论坛徽章:
43
现任管理团队成员
日期:2011-05-07 01:45:08ITPUB元老
日期:2012-09-12 14:50:28版主5段
日期:2014-06-11 02:21:31阿斯顿马丁
日期:2013-11-19 10:38:16祖母绿
日期:2012-11-06 12:43:12路虎
日期:2013-11-20 11:37:53雪佛兰
日期:2013-09-05 13:28:25ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24秀才
日期:2015-05-26 13:32:07
21#
发表于 2013-9-9 15:11 | 只看该作者
huojunlu 发表于 2013-9-9 12:10
lgwr 触发条件, 3秒,1mb,1/3buffer。 如果楼主做过 oracle 的 大规模并发测试的话,应该能发现oracle 的 ...

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51
22#
发表于 2013-9-9 15:32 | 只看该作者
myth8860 发表于 2013-9-9 15:11

使用道具 举报

回复
论坛徽章:
2
2008新春纪念徽章
日期:2008-02-13 12:43:032013年新春福章
日期:2013-02-25 14:51:24
23#
 楼主| 发表于 2013-9-11 15:15 | 只看该作者
aio_o_ 发表于 2013-9-9 10:01
无语了,oracle的commit是不会触发dbwr回写数据的...

我对你的说法很无语,oracle的commit不不将日志写出到磁盘上,怎么保证ACID

使用道具 举报

回复
论坛徽章:
2
2008新春纪念徽章
日期:2008-02-13 12:43:032013年新春福章
日期:2013-02-25 14:51:24
24#
 楼主| 发表于 2013-9-11 15:18 | 只看该作者
aio_o_ 发表于 2013-9-9 10:02
你以为commit之前的insert,oracle啥都没干么?等你commit才去写redo么?

我知道oracle的commit之前的insert写redo和undo日志,但都是写在内存的logbuf中,commit的时候要保证当前事务写到logbuf的日志都写出到磁盘上。当然在并发情况下,commit的时候可能当前事务的日志已经被其它事务顺便刷出去了,但我这里并没说这种情况

使用道具 举报

回复
论坛徽章:
2
2008新春纪念徽章
日期:2008-02-13 12:43:032013年新春福章
日期:2013-02-25 14:51:24
25#
 楼主| 发表于 2013-9-11 15:30 | 只看该作者
huojunlu 发表于 2013-9-9 12:10
lgwr 触发条件, 3秒,1mb,1/3buffer。 如果楼主做过 oracle 的 大规模并发测试的话,应该能发现oracle 的 ...

你是霍俊路?

使用道具 举报

回复
论坛徽章:
43
现任管理团队成员
日期:2011-05-07 01:45:08ITPUB元老
日期:2012-09-12 14:50:28版主5段
日期:2014-06-11 02:21:31阿斯顿马丁
日期:2013-11-19 10:38:16祖母绿
日期:2012-11-06 12:43:12路虎
日期:2013-11-20 11:37:53雪佛兰
日期:2013-09-05 13:28:25ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24秀才
日期:2015-05-26 13:32:07
26#
发表于 2013-9-11 17:25 | 只看该作者
wxz317 发表于 2013-9-11 15:30
你是霍俊路?

这小伙很不错

使用道具 举报

回复
论坛徽章:
1
ITPUB社区OCM联盟徽章
日期:2014-11-17 13:33:27
27#
发表于 2013-9-12 08:52 | 只看该作者
wxz317 发表于 2013-9-11 15:18
我知道oracle的commit之前的insert写redo和undo日志,但都是写在内存的logbuf中,commit的时候要保证当前 ...

commit之前的日志,怎么能只在内存里啊,上面的兄弟不是说明了嘛,lgwr被触发的三个条件,写满1mb就会去写磁盘的日志文件了。只是供大于求,写的没那么快而已,所以堆积起了部分内存。就这样吧,疲惫了...

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51
28#
发表于 2013-9-12 10:57 | 只看该作者
wxz317 发表于 2013-9-11 15:18
我知道oracle的commit之前的insert写redo和undo日志,但都是写在内存的logbuf中,commit的时候要保证当前 ...

这个地方你的理解有误。undo日志不是写在log buffer里面,是写在 undo segement里面。undo segment的修改,就像表的修改一样,会再次触发redo日志。也就是说一个更新涉及到2部分的redo.
lgwr和dbwr不是一回事,一个是写日志,一个是刷buffer。所以aio_o_说commit 不会触发dbwr(刷buffer),但是会触发lgwr(写日志)。正常情况下,不论前面的事务有多大,commit操作都是瞬间完成,因为需要做的就是在把log buffer 刷回磁盘和在回滚段头的事务表中记录提交字段,可能在某些情况下会涉及到快速块清除,但是有着严格的算法控制,不会有太多的代价,否则就用延迟块清除。

使用道具 举报

回复
论坛徽章:
43
现任管理团队成员
日期:2011-05-07 01:45:08ITPUB元老
日期:2012-09-12 14:50:28版主5段
日期:2014-06-11 02:21:31阿斯顿马丁
日期:2013-11-19 10:38:16祖母绿
日期:2012-11-06 12:43:12路虎
日期:2013-11-20 11:37:53雪佛兰
日期:2013-09-05 13:28:25ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24秀才
日期:2015-05-26 13:32:07
29#
发表于 2013-9-13 13:29 | 只看该作者
huojunlu 发表于 2013-9-12 10:57
这个地方你的理解有误。undo日志不是写在log buffer里面,是写在 undo segement里面。undo segment的修改 ...

小伙最近oracle学的很深啊。

使用道具 举报

回复
论坛徽章:
1
ITPUB社区OCM联盟徽章
日期:2014-11-17 13:33:27
30#
发表于 2013-9-14 12:51 | 只看该作者
tanyangxf 发表于 2013-9-13 14:27
我估计你们都没了解对方的意思,aio_o_的意思是commit不会触发dbwr,不是说commit不触发lgwr

有明白人啊

使用道具 举报

回复

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

本版积分规则 发表回复

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