love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL/PostgreSQL数据恢复、性能优化、迁移升级、紧急救援等服务

sql execution plan in heap 6?

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

本文链接地址: sql execution plan in heap 6?

今天在看Jonathan Lewis大师的oracle core第194页时,Jonathan Lewis提到了一个知识点,一个
看似大家都知道的但是似乎又没有去关注过:oracle sql execution plan在什么地方呢?原文如下:

Jonathan Lewis大师说是在heap 6的位置里面,下面我们来进行验证。

我们要去dump library cache,那么就需要先知道某个handle的具体位置,不然dump出来我们也不知道
具体是哪个.

我们vi 该trace 然后搜索2994f5a0 可以发现如下内容:

这里可以看到其子游标的handle地址是 29893a90,我们继续搜索29893a90:
发现没有需要的内容了,怪了。
可能是上面的dump level小了点了,关于library cache dump的level说明如下:

Level =1 ,转储Library cache统计信息
Level =2 ,转储hash table概要
Level =4 ,转储Library cache对象,只包含基本信息
Level =8 ,转储Library cache对象,包含详细信息(包括child references,pin waiters等)
Level =16,增加heap sizes信息
Level =32,增加heap信息

所以我们这里level必须大于8才行,下面我们继续dump下:

下面我们开始搜索:2994f5a0,找到如下信息:

我们可以清楚的看到heap 的总大小是1.05k,其中分配使用了1.01k。
继续搜索29893a90,找到如下详细信息:

这里补充下:

我们看到这个cursor有2个data#,分别是0和6,Jonathan Lewis大师说sql plan是在heap 6里面,
那我们就来dump下 heap 6看看是否是这样:

9.2以前版本dump heap的命令如下:

ALTER SESSION SET EVENTS
‘immediate trace name heapdump_addr level 2153245561’;

9.2以后版本则变为如下命令:

ALTER SESSION SET EVENTS
‘immediate trace name heapdump_addr level 2, addr 2153245560’;

具体用法请参考http://www.juliandyke.com/Diagnostics/Dumps/HEAPDUMP_ADDR.html

trace 信息如下:

从上面可以清楚的看到index T_IDX_ID的信息,也就验证了Jonathan Lewis的说法。

Leave a Reply

You must be logged in to post a comment.