Oraclecommit的时候发生了什么

 我来答
懂视生活
2023-07-27 · 百度认证:湖南福仁科技有限公司官方账号
懂视生活
向TA提问
展开全部

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的时间都很短。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式