ITPub博客

首页 > 数据库 > Oracle > [OWI] latch free

[OWI] latch free

原创 Oracle 作者:exem0626 时间:2016-05-04 10:06:41 0 删除 编辑
1. Basic Info 
表示进程用 Willing-to-wait 模式执行相当于 _SPIN_COUNT 次数的自旋 (spin) 后失败后进入睡眠(sleep)。Oracle 为了保护 SGA 而使用锁存器。SGA是本地市里的单位存在,所以锁存器只能在相应实例上观察。锁存器的获取方式有 Willing -to-wait 和 No -Wait 两种。

Willing-to-wait 方式等待到获取锁存器为止的方式,分为自旋(Spin)方式与 Posting 方式。自旋方式是在进程若在获取锁存器过程中失败,则循环活当的次数,并试图重新获取锁存器,他的循环次数与_SPIN_COUNT(缺省值是 2000) 参数值相同。而以 Posting 方式是执行的锁存器比起自旋方式相比是会长时间等待锁存器,是前一个算存期解除为止在等待列(wait list) 中等待的方式。在这里注意的部分虽然使用了等待列,但无法保障顺序。使用 Posting 方式的代表性锁存器是 shared pool latch 和 library cache latch。

大部分的锁存器获取是使用 Willing-to-wait 模式,但以下情况使用 No-wait 模式。 当前拥有其他锁存器的进程要获取比最近获取的锁存器级别低或相同的级别的锁存器时,会以 No-wait 方式尝试获取。

之所以使用 Willing-to-wait 和 No-Wait 两种方式,是为了防止锁存起的死锁发生。要获取的锁存器比最近一个获取的锁存起的级别相同与小的时候,以 No-wait 请求; 获取比最近一个获取锁存器的级别高的锁存器时,以 willing-to-wait 请求。发生锁存起的死锁时会报 ORA-600 的错误。

Latch 基本上使用独占(Exclusive) 模式,瞬间只让一个进程占用锁存器,但在特殊的锁存器上也可以用共享模式占用。9i 以上在 cache buffers chains latch 下读取时使用共享模式。

到 9i 为止所有锁存器等待现象是以 latch free 表示,但是 10g 开始重要的锁存器以其他的形式来表示了等待事件。虽不能直接掌握锁存器名称的 latch free 等待事件中, P2 的值就是 latch#, 将该值与 V$LATCHNAME.LATCH# 连接就可以知道锁存器的名字。

SQL> select event#, name from v$event_name
         where name like 'latch:%';
EVENT# NAME
---------- ----------------------------------------------------------------
        58 latch: cache buffers chains
       106 latch: redo writing
       107 latch: redo copy
       191 latch: Undo Hint Latch
       193 latch: In memory undo latch
       194 latch: MQL Tracking Latch
       204 latch: row cache objects
       210 latch: shared pool
       211 latch: library cache
       212 latch: library cache lock
......


latch: cache buffers chains
在高速缓冲区要查找特定块的进程需要获取 cache buffers chains 锁存器。在这个过程中若发生争用,会等待 latch: cache buffers chains 事件。

latch: cache buffers lru chain
在高速缓冲区查找空闲缓存和脏缓存的进程需要获得 cache buffers lru chain 锁存器。在这个过程中若发生争用,会等待 latch: cache buffers lru chain 事件。

latch: shared pool
在共享池的堆区域中分配新的大块的进程需要获取 shared pool 的锁存器。在这个过程中若发生争用, 会等待 latch: shared pool 事件。

latch: library cache
要探查库高速缓冲区的进程需要获取 library cache 锁存器。在这个过程中发生争用,会等待 latch: library cache 事件。

latch: redo copy 
将因 DML 修改内容记录到重做缓冲区进程需要获取 redo copy 的锁存器。在这个过程中若发生争用,会等待 latch: redo copy 事件。

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

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

注册时间:2016-04-22

  • 博文量
    21
  • 访问量
    18952