客服微信
注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
操作系统版本:CentOS Linux release 7.6.1810 (Core)
实验环境:PDB1
以下实验,是连接到pdb下,硬解析一条SQL的过程
• x$kglob记录SQL的游标句柄信息
• KGLHDADR 游标句柄地址
• KGLNAOBJ 游标对应SQL信息
• KGLOBHD0 父游标堆0对应的地址,其实它是父游标堆0的描述地址,记录父游标堆0下有哪些chunk
通过724BC840去1.3中生成的trc文件中搜索
trc日志解析:
• recrPT003表示它是一个recreate类型的chunk
• sz表示它的大小为816字节
• KGLHD表示它是KGL句柄
• 同时它是一个独立的CHUNK,不属于任何子堆
通过多次实验可以确认,句柄头的地址与句柄地址相关48字节
可以确认DS对应的chunk是freeable,大小为504字节,和父游标堆0不相邻
通过多次实验可以确认,DS头的地址与DS地址相差104字节
KSMCHPTR=000000006F6A0E98就是父游标堆0真正的CHUNK了,继续找
ds 06fb55c80就是上面查的父游标DS地址
通过地址6F68D8D去找子游标句柄
子游标句柄也是recretable类型,KGLHD表示它是句柄,大小560字节
同时子游标句柄在父游标堆0也可以找到对应的地址
这里因为共享池设置的太小,导致子游标的堆0和堆6被覆盖了,进一步验证freeable最容易被覆盖
研究的方案和父游标一样,这样可以计算出一条SQL占用了哪些CHUNK,对共享池优化有进一步的帮助。
2.3 子游标堆0 DS信息
KGLOBHD0=000000006DC82F68
KGLOBHD0=000000006F6A1680