表的跟踪
<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需要具备更高的专业素养