理解redo(7)oracle redo并行机制的原理介绍

2014-11-24 18:36:42 · 作者: · 浏览: 0

在前面的文章中,


我们知道,redo entries写入log buffer大致的过程如下:


在PGA中生产Redo Entry -> 服务进程获取Redo Copy latch(存在多个---CPU_COUNT*2) -> 服务进程获取redo allocation latch(仅1个) -> 分配log buffer ->


释放redo allocation latch -> 将Redo Entry写入Log Buffer -> 释放Redo Copy latch


由于log buffer是一块“共享”内存,为了避免冲突,它是受到redo allocation latch保护的,每个server process需要先获取到该latch才能分配redo buffer。因此,在OLTP系统中,我们通常可以观察到redo allocation latch的等待事件。


1 shared strand


为了减少redo allocation latch等待事件,oracle引入了log buffer的并行机制。其基本原理是,将log buffer划分为多个小的buffer,这些小的buffer被称作shared strand。每一个shared strand受到一个单独的redo allocation latch的保护。多个shared strand的出现,使得原来序列化的redo buffer分配变成了并行的过程,从而减少了redo allocation latch的等待。


shared strand由一些隐藏参数控制:


每一个shared_strand的大小=log_buffer/(shared_strand的数量):


关于shared strand的数量设置,16个cpu之内最大默认为2,当系统中存在redo allocation latch等待时,每增加16个cpu可以考虑增加1个strand,最大不应该超过8。


并且_log_parallelism_max不允许大于cpu_count。