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)

}



本文转自maclean_007 51CTO博客,原文链接:
http://blog.51cto.com/maclean/1278270

相关文章
|
SQL 存储 Oracle
Oracle数据库中游标的工作原理与优化方法
Oracle数据库中游标的工作原理与优化方法
|
SQL 存储 Oracle
Oracle优化03-Latch和等待
Oracle优化03-Latch和等待
440 0
|
存储 运维 Oracle
Oracle数据库机:让数据价值回归用户“第一性原理”
Oracle数据库机:让数据价值回归用户“第一性原理”
|
SQL 存储 Oracle
MySQL和Oracle的区别是什么?底层原理是什么?
MySQL和Oracle的区别是什么?底层原理是什么?
1707 0
|
运维 监控 Oracle
3月19日直播【从12c到20c,Oracle多租户之10046跟踪PDB关库案例原理解析】
本次分享将针对DevOps代码质量审核、监控、开发环境测试、生产环境测试这四个方面存在的问题进行剖析并给出解决之道,希望能助您全面转型DevOps。
782 0
|
SQL Oracle 关系型数据库

推荐镜像

更多