ORACLE锁存器(LATCH)

我的读书笔记:转载请注明
 
锁存器:
    什么是锁存器: 锁存器是存在于ORACLE中用于保证一些内存结构一致性的轻量级锁,为什么说是轻量级的,应该是锁存器一般等待的时间较短为了保证不发生死锁,
    锁存器的级别:锁存器分为0-13 14种模式,在willing-to-wait模式下只能获得更改等级的锁存器,如果想获得同等级或者更低 级别的锁存器,就必须使用no-wait模式进行获取。如果想查看锁存器的等级可以参考v$latch,v$latch_children的LEVEL#字段。
    锁存器类型:锁存器类型包括 willing-to-wait和no-wait模式
  willing-to-wait模式:这个模式就是要一直等待直到获得锁存器为止,在初次获得latch失败的情况下,latch会进入spin,直到达到_spin_count的值。
  (这个参数参考如下:
  _spin_count:willing-to-wait 模式的锁存器在获得锁存器失败的情况下进行循环获取的次数,如果超过了这个次数就进行睡眠,只有1个CPU的机器上不存在自旋   也就是这个参数为1)
  如果在spin过程中任然不能得到latch,这个时候就进入sleep,表现在v$session_wait中就是latch:***
进入了睡眠过后等待唤醒也有2中方式,
     1、可以在进入超时后唤醒重新进行获取,如果不能得到任然经理spin,如果还不能再进行睡眠,超时的算法以1/100秒为单位初次随眠是1、1、2、2、4、4、8、8、16、16最多为2秒,为神马引入这样的机制,因为spin也是相当耗费CPU的,所以引入这样的机制,避免过多的cpu资源浪费。
      2、另外一种方法就是通过锁存器列表,使用这样的方式锁存器很少,比如shared pool,library cache,这种机制说的是使用一个列表来维护等待的进程,如果latch释放,然后列表中的进程进行竞争获得latch,列表本生也不是LRU原则,是竞争原则。
   no-wait模式:如果进程项获得比当前latch更低或者相同级别的latch就必须用这样的方式,这种方式是为了避免死锁,这样的模式不存在spin和sleep,能获取就获取如果不能获取,就通过willing-to-wait模式重新按顺序获取,比如我当前LATCH为level 1,3 如果某个进程项获取2 level 的latch,就通过no-wait模式,如果是失败就通过2,3的顺序重新获取。
  相关视图:
 通过v$latch,v$latch_children视图的字段可以看出
 gets 是willing-to-wait模式下需求的次数
 misses 是willing-to-wait模式下到睡眠之前获取失败的次数
 spin_gets 是willing-to-wait模式下通过spin成功获得latch的次数
 sleeps 是willing-to-wait模式睡眠的次数
 immediate_gets 就是no_wait模式下获得锁存器成功的次数
 immediate_misses 就是no_wait模式下获得锁存器失败的次数
 wait_time 以毫秒为单位的等待时间 
如果有误请大虾指出。thx

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

转载于:http://blog.itpub.net/7728585/viewspace-723160/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值