ITPub博客

首页 > 数据库 > Oracle > latch

latch

原创 Oracle 作者:diashad 时间:2015-01-05 11:22:04 0 删除 编辑


latch


Latch属于System Lock, 用于保护SGA区中共享数据结构的一种串行化锁定机制。Latch的实现是与操作系统相关的,尤其和一个进程是否需要等待一个latch、需要等待多长时间有关。
Latch是Oracle提供的轻量级锁资源,是一种能够极快地被获取和释放的锁,能快速,短时间的锁定资源,防止多个并发进程同时修改访问某个共享资源,它只工作在SGA中,通常用于保护描述buffer cache中block的数据结构。
比如SGA中,各种数据被反复从磁盘读取到内存,又被重新写回到磁盘上,如果有并发的用户做相同的事情,Oracle必须使用一种机制,来保证数据在读取的时候,只能由一个会话来完成,这种保护机制就是Latch。
并发(concurrency):是说有超过两个以上的用户对同样的数据做修改(可能包括插入,删除和修改)。
并行(parallel):是说将一件事情分成很多小部分,让每一部分同时执行,最后将执行结果汇总成最终结果。

Latch不会造成阻塞,只会导致等待。 阻塞是一种系统设计上的问题,等待是一种系统资源争用的问题。 
latch有level的概念,用于防止死锁。当一个进程持有一个一定level的latch时,它不能马上申请和它同一个level,或是低于它level的latch,除非可以以nowait的方式获得。




latch分为两种类型:
a. willing-to-wait,是指如果所请求的latch不能立即得到,请求进程将等待一很短的时间后再次发出请求。进程一直重复此过程直到得到latch。
_spin_count
_max_exponential_sleep
_max_sleep_holding_latch

例子: shared pool && library cache latch
b. immediate,是指如果所请求的latch不能立即得到,请求进程就不再等待,而是继续执行下去。
例子:redo copy latch


v$latch 表的每一行包括了对不同类型latch的统计,每一列反映了不同类型的latch请求的活动情况。不同类型的latch请求之间的区别在于,当latch 不可立即获得时,请求进程是否继续进行。按此分类,latch请求的类型可分为两类:willing-to-wait和immediate。
 
在v$latch中的以下字段反映了Willing-to-wait请求:
GETS---成功地以Willing-to-wait请求类型请求一个latch的次数。
MISSES---初始以Willing-to-wait请求类型请求一个latch不成功的次数。
SLEEPS---初始以Willing-to-wait请求类型请求一个latch不成功后,进程等待获取latch的次数。


在v$latch中的以下字段反映了Immediate类请求:
IMMEDIATE_GETS---以Immediate请求类型成功地获得一个latch的次数。
IMMEDIATE_MISSES---以Immediate请求类型请求一个latch不成功的次数。


latch命中率
willing-to-wait (gets-misses)/gets*100
no wait (immediate_gets-immediate_misses)/immediate_gets*100


latch 相关视图


v$latch 选取X$KSLLT记录时,进行了Group By及SUM运算,从而得出了一个汇总信息,而V$LATCH_CHILDREN视图并不进行汇总运算,所以也就显示了子Latch的相关信息

所谓子Latch就是library cache在系统中包含了多少个具体的物理数量的library cache,他们的分配原则是这样的 v$latch_children内容的条数一般都是v$latch cpu+1倍

v$latch_children
v$latch_parent 同v$latch


与v$latch连接字段
v$Latch_CHILDREN.NAME/LATCH#
v$LatchHOLDER.NAME
v$LatchNAME.NAME/LATCH# 

Latch和Lock的区别:
  a. Latch是对内存数据结构提供互斥访问的一种机制,而Lock是以不同的模式来套取共享资源对象,各个模式间存在着兼容或排斥,从这点看出,Latch 的访问,包括查询也是互斥的,任何时候,只能有一个进程能pin住内存的某一块,幸好这个过程是相当的短暂,否则系统性能将没的保障,从9I开始,允许多个进程同时查询相同的内存块。
b.Latch只作用于内存中,他只能被当前实例访问,而Lock作用于数据库对象,在RAC体系中实例间允许Lock检测与访问
  c. Latch是瞬间的占用,释放,Lock的释放需要等到事务正确的结束,他占用的时间长短由事务大小决定
  d. Latch是非入队的,而Lock是入队的
e. Latch不存在死锁,而Lock中存在。

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

上一篇: Lock
请登录后发表评论 登录
全部评论

注册时间:2011-08-08

  • 博文量
    86
  • 访问量
    472941