Oracle 11g下如何捕捉library cache对象执行时产生的(3)


表的跟踪
      <Type>CURSOR(00)</Type>
      <Identifier>1353648832</Identifier>
      <OwnerIdn>0</OwnerIdn>
    </ObjectName>
  </LibraryHandle>
  <LibraryObjectLock>
    <Address>7000000bda28ef8</Address>
    <Handle>7000000bd9ef918</Handle>
    <Mode>N</Mode>
  </LibraryObjectLock>
</KGLTRACE>


针对"select * from scott.t0517_2"语句句柄的lock/pin相关操作所调用到的内核函数,从trace结果中按照调用先后顺序输出如下:
kglLock
kglHandleInitialize
kgllkal
kglLock
kglpin
kglobld
kglHandleInitialize
kglPin
kglUnPin
kglpndl


按我个人的理解kglHandleInitialize是在硬解析的时候构造存放SQL的handle address、kgllkal应该是用于分配lock address,kglobld用于将object装载进内存
与此类似对于表Scott.t0517_2也有这么一组内核函数完成加锁解锁的过程。
无论是lock还是pin都有三个模式属性LockMode、PinMode、LoadLockMode,每个模式属性都有N,S,X,0四种取值的可能性。
完整的Trace文件可以参考附件"tstdb1_ora_8193016.trc"


通过以上对比不难发现相比10g仅能输出游标的trace信息,11g引入了_kgl_debug参数后所能提供的library cache lock/pin信息跟踪选项更为全面,能对游标进行Trace也能对各object输出Trace信息,信息量更为丰富,当然读懂这些Trace需要具备更高的专业素养

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b30f18d2dd6b0e7dc6d087fce904bf2f.html