如何查看oracle latch中的latch数

查看: 1558|回复: 5
关于latch的获得及释放
认证徽章论坛徽章:71
Oracle 10.2.0.4&&
假设一个客户端 user1 发出一个语句&&update&&t& & set&&aa='D'&&where&&bb='E' ;&&这条语句对应的记录在两个数据块 121, 127 中,对应的符合条件的
行有 8 rows&&(两个块中分别有 4 行) ,& & 用户发出语句后,&&对应的数据块 121, 127 会被读入buffer cache 中, 准备对这两个块进行修改,这时候我们会获得这两个块的latch。&&
1.& &这时候user1 发出的这个SQL对应的进程获得的latch 是一个还是两个 ?
2.& &Oracle将这八行数据对应的两个block读入buffer cache 的时候,对应的8个逻辑数据行应该还没有TX Lock,只有当准备更新而在buffer cache中获
& && &得latch的时候相应的八行数据才有 TX Lock ?& & 这八行数据获得TX Lock是否有先后顺序 ?& &
3.& &此进程针对数据块 121 的latch 是否在更新完成在它上面的 4 行记录后马上释放latch&&?& &还是说在8行数据都更新完毕后才释放针对 121, 127
& && &两个数据块的latch&&?
认证徽章论坛徽章:71
论坛徽章:15
论坛徽章:1
我想楼主对latch有点误解,latch是oracle对内存的一种保护措施,不是建立在块这种单位上。
所以对于第一个问题,个人认为无法得到正确答案,如果说2个块是在一个latch负责的buffer上,那么只有一个latch,如果说不在,那么可能是2个。
对于第二三问题,还是请高手回答下,个人认为latch的获得是非常短暂的,至于和TX比较不知道,只是认为TX锁应该是在块头写一笔记录,告诉这块中的某行拥有什么,不能做什么操作
论坛徽章:97
1。 在读入buffer cache 时 会产出latch , 例如 buffer busy wait . 读取后放入 lru list 中。 会有 cache buffer chain/lru latch .
2。 tx lock 会有顺序的,首先在block 级别的。
3。 latch 会在 lock 之前,不会等lock 完成的。
认证徽章论坛徽章:71
原帖由 oracle_man 于
10:00 发表
我想楼主对latch有点误解,latch是oracle对内存的一种保护措施,不是建立在块这种单位上。
所以对于第一个问题,个人认为无法得到正确答案,如果说2个块是在一个latch负责的buffer上,那么只有一个latch,如果说不在,那么可能是2个。
对于第二三问题,还是请高手回答下,个人认为latch的获得是非常短暂的,至于和TX比较不知道,只是认为TX锁应该是在块头写一笔记录,告诉这块中的某行拥有什么,不能做什么操作
是的, latch是针对内存的一种轻量级锁, 这里是为了清楚知道它锁定的最小单位或锁定的标准(比如一个进程),所以才有在内存中“块”的这种称呼。
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号用户名:maclean_007
文章数:1318
访问量:69867
注册日期:
阅读量:1297
阅读量:3317
阅读量:453220
阅读量:1137774
51CTO推荐博文
还是搞不懂oracle中latch 闩的原理吗?那么来看看这个图 以及下面这段代码如何?
Function Get_Latch(latch_name,mode)
If Mode eq ‘immediate’ {
If Fast_Get(latch_name) {
return TRUE
return FALSE
If Fast_Get(latch_name)
v$latch.gets++
return TRUE
v$latch.misses++
for try = 0 .. large_number
if Spin_Get(latch_name)
return TRUE
Sleep(try)
Register_Event("latch free",T1-T0)
} -- spin/sleep loop
Function Fast_Get(latch_name)
If try_to_get_latch(latch_name)
return TRUE
return FALSE
Function Spin_Get(latch_name)
v$latch.spin_get++
for i = 1 to _spin_count
If Fast_Get(latch_name)
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)
}本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:未分类┆阅读(0)┆评论(0)oracle latch学习详细资料_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
oracle latch学习详细资料
&&详细介绍oracle latch原理和处理方式
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩17页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 oracle latch 的文章

 

随机推荐