zoukankan      html  css  js  c++  java
  • Oracle latch闩原理示意图

    还是搞不懂oracle中latch 闩的原理吗?那么来看看这个图 以及下面这段代码如何?    
    Function Get_Latch(latch_name,mode)
    {
      If Mode eq ‘immediate’ {
        If Fast_Get(latch_name) {
          return TRUE
        Else {
          return FALSE
        }
      }
      Else {
        If Fast_Get(latch_name)
        Then {
          v$latch.gets++
          return TRUE
        }
        Else {
          v$latch.misses++
          for try = 0 .. large_number
          {
            if Spin_Get(latch_name)
            Then {
              return TRUE
            }
            Else {
              T0 = time
              Sleep(try)
              T1=time
              Register_Event("latch free",T1-T0)
            }
          } -- spin/sleep loop
        }
      }
    }
    
    Function Fast_Get(latch_name)
    {
      If try_to_get_latch(latch_name)
      Then {
        return TRUE
      }
      Else {
        return FALSE
      }
    }
    
    Function Spin_Get(latch_name)
    {
      v$latch.spin_get++
      for i = 1 to _spin_count
      {
        If Fast_Get(latch_name)
        Then {
          return TRUE
        }
      }
    }
    
    Function Sleep(try)
    {
      v$latch.sleeps++
      v$latch.sleep[try]++
      sleeptime =
        decode(try,0,0,1,10,2,20,3,~40,4,~80,...~2000)
      sleep(sleeptime)
    }
  • 相关阅读:
    python虚拟环境--virtualenv
    python使用smtplib发送邮件
    python网络编程
    python操作MySQL数据库
    python面向对象
    python内置函数总结
    python异常处理
    python文件I/O
    python模块
    python函数
  • 原文地址:https://www.cnblogs.com/macleanoracle/p/2968239.html
Copyright © 2011-2022 走看看