ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle 10g redolog buffer 的改革

oracle 10g redolog buffer 的改革

原创 Linux操作系统 作者:小被子0000 时间:2010-05-13 22:45:17 0 删除 编辑
        在10g中,redolog buffer的改进,的确是个不小的创新,我最近研究了下10g版本在redolog buffer上的改进,和大家共享下。
说之前,我先提下,redo信息产生的过程:

1)先在PGA区域中生成redo entries,也就是redo条目,并计算大小记录之;
2)服务器进程oracle去rodolog buffer中申请redo copy latch(redo 复制闩),失败了,会发生等待事件,成功了则:
3)再去申请redo allocation latch(在rodolog buffer中申请空间的闩),一旦redo中有足够的空间,就可以申请成功,这时
4)释放这个redo allocation latch
5)服务器进程再去申请redo writting latch(redo 写入内存的闩),成功后则:
6)服务器进程把PGA中准备好得redo entries 写入到redolog buffer中,
7)按顺序释放redo writting latch 和redo copy latch。
分析以上7步,完成redo信息的产生,接下来就是lgwr进程的写入在线日志文件的工作了,我不去介绍。

        大家观测这个过程不难发现,redo copy latch在开始就被申请,而最后才被释放,势必会引起争用,或者等待事件的发生,降低了效率,到了9i这个版本,oracle引入了PBRS(public redo strands)机制,就是借鉴了share pool 分出多个子池(subpool)的思想,也分出了多个log buffer,每个buffer有独立的latch保护,以提高并发性,提高效率。
        到了10g版本,又有了改革的新思想,就是PVRS(private redo strands)机制。原理是,在share pool中申请多个小的私有内存空间,每个在64-128KB之间,被独立的redo allocation latch保护。这样的好处是显而易见的,单个redo信息很小,但个数很多的时候(oracle多年测试得出结论就是大多数事务所产生的redo都是很小的,但次数比较多),不会在PGA中产生redo entries,而是直接放在 share pool中申请多个小的私有内存空间中,redo copy latch也不再需要,因为oracle认为redo copy latch这个闩是是引发竞争的根源。当redo写出到文件时,LGWR将PBRS和PVRS中的内容写出到日志文件中。产生日志时首选pvrs,如果redo条目太大,或者share pool没有空间,再用redo log buffer(也就是9i时发明的PBRS中)。

关键词:
redo copy latch
PBRS(public redo strands)
PVRS(private redo strands)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22782896/viewspace-662648/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-05-08

  • 博文量
    10
  • 访问量
    28433