oracle php commit,Oracle commit的时候发生了什么

1.从理解LOGW什么时候将redo log buffer中把redo写入redo log file理解commit; 当redo log buffer 三分之一满的时候写 当commi

1.从理解LOGW什么时候将redo log buffer中把redo写入redo log file理解commit;

当redo log buffer 三分之一满的时候写

当commit的时候写

当发生日志切换的时候写

当产生的redo满1M的时候写

当DBWN要写的时候,先写redo

每3秒写

也就是说,redo是以一种相对连续的方式写入日志文件的。所以不管一个事务产生了多少redo,,其实commit的时候做的工作都差不多,因为大部门的redo已经写入日志文件了

2.commit的时候发生了什么

把SCN号写入日志文件

LGWN把剩余的redo写入日志文件

所有locks被释放掉

进行块清理。块清理是指将,将保存在这个block中的事务信息清理掉。

所以实际上每次commit的时候做的工作都很少,最大的工作就是将redo写入日志文件了,但是大部门redo已经写入到日志文件了;但是这也不代表,每次修改一个块的时候,都要去commit,这样会增加对日志文件的竞争(日志文件是个共享结构),同时也增加了对latches的竞争(保护对共享结构的访问)。所以应该根据逻辑事务的大小来决定什么时候commit。

3.下面一个例子,产生不同大小的redo,来说明提交的时候,做的工作时间上差不多

s1:创建一个大表

s2:创建一个需要插入10行数据的表t_10,设置自动追踪

s3:插入1000行

插入10000行

发现,插入10行,1000行,10000行,commit的时间都很短。

logo.gif

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值