<10> library cache pin该事件通常是发生在先有会话在运行PL/SQL,VIEW,TYPES等object时,又有另外的会话执行重新编译这些object,即先给对象加上了一个共享锁,然后又给它加排它锁,这样在加排它锁的会话上就会出现这个等待。P1,P2可与x$kglpn和x$kglob表相关X$KGLOB (Kernel Generic Library Cache Manager Object)X$KGLPN (Kernel Generic Library Cache Manager Object Pins)-- 查询X$KGLOB,可找到相关的object,其SQL语句如下(即把V$SESSION_WAIT中的P1raw与X$KGLOB中的KGLHDADR相关连)select kglnaown,kglnaobj from X$KGLOBwhere KGLHDADR &#61;(select p1raw from v$session_waitwhere event&#61;&#39;library cache pin&#39;)-- 查出引起该等待事件的阻塞者的sidselect sid from x$kglpn , v$sessionwhere KGLPNHDL in(select p1raw from v$session_waitwhere wait_time&#61;0 and event like &#39;library cache pin%&#39;)and KGLPNMOD <> 0and v$session.saddr&#61;x$kglpn.kglpnuse-- 查出阻塞者正执行的SQL语句select sid,sql_textfrom v$session, v$sqlareawhere v$session.sql_address&#61;v$sqlarea.addressand sid&#61;这样,就可找到"library cache pin"等待的根源&#xff0c;从而解决由此引起的性能问题。
<11> library cache lock该事件通常是由于执行多个DDL操作导致的,即在library cache object上添加一个排它锁后,
中查找其对应的对象。-- 查询引起该等待事件的阻塞者的sid、会话用户、锁住的对象select b.sid,a.user_name,a.kglnaobjfrom x$kgllk a , v$session bwhere a.kgllkhdl in(select p1raw from v$session_waitwhere wait_time&#61;0 and event &#61; &#39;library cache lock&#39;)and a.kgllkmod <> 0and b.saddr&#61;a.kgllkuse当然也可以直接从v$locked_objects中查看&#xff0c;但没有上面语句直观根据sid可以到v$process中查出pid&#xff0c;然后将其kill或者其它处理。
<12> latch free(等待LATCH FREE)latch 是一种低级排队机制(它们被准确地称为相互排斥机制),用于保护系统全局区域(SGA)中共享内存结构。latch就像是一种快速地被获取和释放的内存锁。latch用于防止共享内存结构被多个用户同时访问。如果latch不可用&#xff0c;就会记录latch释放失败。大多数latch问题都与以下操作相关&#xff1a;不能使用邦定变量(库缓存latch)、重复生成问题(重复分配latch)、缓冲存储器竞争问题(缓冲器存储LRU链)&#xff0c;以及缓冲存储器中的"热"块(缓冲存储器链)。也有一些latch等待与bug(程序错误)有关&#xff0c;如果怀疑是这种情况&#xff0c;可以检查MetaLink上的bug报告。该事件的热点对象可通过以下语句查找&#xff0c;其中&2值是v$session_wait中的P1RAW&#xff0c;x$bh中的字段Hladdr表示该block buffer在哪个cache buffer chain latch上&#xff0c;可以通过v$latch_children定位哪些segment是热点块。&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;select a.hladdr, a.file#, a.dbablk, a.tch, a.obj, b.object_namefrom x$bh a, dba_objects bwhere (a.obj &#61; b.object_id or a.obj &#61; b.data_object_id)and a.hladdr &#61; &2unionselect hladdr, file#, dbablk, tch, obj, nullfrom x$bhwhere obj in(select obj from x$bhwhere hladdr &#61; &2minusselect object_id from dba_objectsminusselect data_object_id from dba_objects)and hladdr &#61; &2order by 4;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;***Latch 问题及可能解决办法------------------------------* Library Cache and Shared Pool (未绑定变量---绑定变量,调整shared_pool_size)每当执行SQL或PL/SQL存储过程,包,函数和触发器时,这个Latch即被用到.Parse操作中此
又从另一个会话给它添加一个排它锁,这样在第二个会话就会生成等待。可通过到基表x$kgllkLatch也会被频繁使用.* Redo Copy (增大_LOG_SIMULTANEOUS_COPIES参数)重做拷贝Latch用来从PGA向重做日志缓冲区拷贝重做记录.* Redo Allocation (最小化REDO生成,避免不必要提交)此Latch用来分配重做日志缓冲区中的空间,可以用NOLOGGING来减缓竞争.* Row Cache Objects (增大共享池)数据字典竞争.过度parsing.* Cache Buffers Chains (_DB_BLOCK_HASH_BUCKETS应增大或设为质数)"过热"数据块造成了内存缓冲链Latch竞争.* Cache Buffers Lru Chain (调整SQL&#xff0c;设置DB_BLOCK_LRU_LATCHES,或使用多个缓冲区池)扫描全部内存缓冲区块的LRU(最近最少使用)链时要用到内存缓冲区LRU链Latch.太小内存缓冲区、过大&#xfffd;&#xfffd;内存缓冲区吞吐量、过多的内存中进行的排序操作、DBWR速度跟不上工作负载等会引起此Latch竞争。
<13> db file parallel write与DBWR进程相关的等待,一般代表了I/O能力出现了问题.通常与配置的多个DBWR进程或者DBWU的I/O slaves个数有关.当然也可能意味着设备上存在着I/O竞争
<14> db file single write表示在检查点发生时与文件头写操作相关的等待.通常与检查点同步数据文件头时文件号的紊乱有关.
<15> direct path read 和direct path write表示与直接I/O读相关的等待.当直接读数据到PGA内存时,direct path read出现.这种类型的读请求典型地作为:排序IO(为排序不能在内存中完成的时候),并行Slave查询或者预先读请求等.通常这种等待与I/O能力或者I/O竞争有关.
<16> free buffer inspected表示在将数据读入数据调整缓存区的时候等待进程找到足够大的内在空间通常这类等待表示数据调整缓存区偏小.
<17> library cache load lock表示在将对象装载到库高速缓存时出现了等待.这种事件通常代表着发生了负荷尔蒙很重的语句重载或者装载,可能由于SQL语句没有共享或者共享池区域编小造成的.
<18> log file parallel write表示等待LGWR向操作系统请求I/O开始直到完成IO.在触发LGWR写的情况下如3秒、1/3、1MB、DBWR写之前可能发生.这种事件发生通常表示日志文件发生了I/O竞争或者文件所在的驱动器较慢
<19> log file single write表示写日志文件头块时出现了等待.一般都是发生在检查点发生时.
<20> transaction表示发生了一个阻塞回滚操作的等待
<21> undo segment extension表示在等待回滚段的动态扩展.这表示可能事务量过大,同时也意味着可能回滚段的寝大小不是最优,MINEXTENTS设置得偏小.考虑减少事务,或者使用最小区数更大的回滚段.