10.Oracle的Latch优化深入解析-盖国强.docx
文本预览下载声明
Oracle的Latch优化深入解析几乎在所有关于Oracle latch机制介绍的图书上,你都可以看到如下描述:Latch是一种低级串行锁机制,用来保护内存结构。更进一步点的会说:Latch机制会通过对内存位的置零或置1来持有或者释放Latch又由于Latch的持有和释放时间都很短,所以一直以来我们都是在通过概念来学习和理解Latch,非常的不直观,再加上在Oracle10g以前,Oracle数据库通过一个名为Latch Free的等待事件来概括Latch竞争,更加造成理解和学习上的困难。最近在一些案例的处理中,加深了对于Latch机制的理解,在这里和大家分享一下我的学习经历。Latch相关的视图和Latch紧密相关的视图主要有:v$latch和v$latch_children。1.1 V$LATCH 使用如下语句可以获得V$LATCH父对象GV$LATCH的创建语句:SELECT VIEW_DEFINITION FROM V$FIXED_VIEW_DEFINITION WHERE VIEW_NAME=GV$LATCH;以下是该视图创建的项目语句:select d.inst_id, d.kslldadr, la.latch#, d.kslldlvl, d.kslldnam, d.kslldhsh, la.gets, la.misses, la.sleeps, la.immediate_gets, la.immediate_misses, la.waiters_woken, la.waits_holding_latch, la.spin_gets, la.sleep1, la.sleep2, la.sleep3, la.sleep4, la.sleep5, la.sleep6, la.sleep7, la.sleep8, la.sleep9, la.sleep10, la.sleep11, la.wait_time from x$kslld d, (select kslltnum latch#, sum(kslltwgt) gets, sum(kslltwff) misses, sum(kslltwsl) sleeps, sum(kslltngt) immediate_gets, sum(kslltnfa) immediate_misses, sum(kslltwkc) waiters_woken, sum(kslltwth) waits_holding_latch, sum(ksllthst0) spin_gets, sum(ksllthst1) sleep1, sum(ksllthst2) sleep2, sum(ksllthst3) sleep3, sum(ksllthst4) sleep4, sum(ksllthst5) sleep5, sum(ksllthst6) sleep6, sum(ksllthst7) sleep7, sum(ksllthst8) sleep8, sum(ksllthst9) sleep9,sum(ksllthst10) sleep10,sum(ksllthst11) sleep11, sum(kslltwtt) wait_time from x$ksllt group by kslltnum) la where la.latch# = d.indx由创建语句可以看出,该视图和两个底层X$结构有关,分别是X$KSLLD,X$KSLLT。这两个X$对象名称及含义如下: X$KSLLT [K]ernel [S]ervice [L]ock Management Latch statistics + Child latchesX$KSLLD [K]ernel [S]ervice [L]ock Management Latch [D]escriptor (name) 从说明可以看到KSSLD代表的是Latch的描述信息,而KSLLT才是Latch的统计信息、子Latch信息。V$LATCH视图的定义最后包含了一个Group by操作,根据Latch号(即kslltnum)对Latch信息进行了分组汇总展示。有了这个Group By也就造成了子Latch的存在,比如最常见的redo copy latch,存在多个,但是经过group by分组
显示全部