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)
}
posted on 2013-03-19 00:51 Oracle和MySQL 阅读(360) 评论(0) 收藏 举报

2群基础群 适合刚入门的同学,会共享最佳入门实践和资料 QQ群 # QQ群号:171092051 # 已经升级到 500人的超级群,空位多多,无需面试
浙公网安备 33010602011771号