Oracle 10g
1. 父游标里主要包含两种信息: SQL文本以及 优化目标(optimizer goal) , 子游标包括游标所有的信息,比如具体的执行计划,绑定变量等。
摘自 <>
2. parent cursor包含了SQL TEXT和相关的hash value,v$sqlarea中的每一行代表了一个parent cursor,根据address表示了其内存地址。
来自 http://space.itpub.net/50897/viewspace-584304
3. PARENT CURSOR包含一个KGLHD,一个KGLOB和1-多个KGLNA。KGLOB指向SUBHEAP(每个PARENT CURSOR至少包含一个HEAP0,里面存放环境、状态和绑定变量的信息)。 每个Parent CURSOR至少有一个CHILD CURSOR,CHILD CURSOR中包含:CURSOR相关环境,CURSOR状态、绑定变量,执行计划等。每个CHILD CURSOR包含一个KGLHD,一个KGLOB和SUBHEAP。在每个CHILD CURSOR中,包含一个HEAP 6,里面存放的是执行计划。
来自 http://www.oraclefans.cn/forum/showblog.jsp?rootid=5553
问题1:
v$sqlarea中的每一行代表了一个parent cursor , 父游标中包含sql文本,根据v$sqlarea中SQL_TEXT可以看出。 父游标中包含的内容都会在 v$sqlarea 中体现吗 ? 如果是这样, 那么optimizer goal 具体到指什么 ? 如下表格中是 v$sqlarea 中的部分字段, 比如buffer_gets , 是统计 Sum of buffer gets over all child cursors , 在这个父游标相关的v$sqlarea视图中已经有了子游标相关的数值, 也就是说是等子游标完全生成后,才会将父游标信息存入v$sqlarea ,同时子游标信息写入v$sql ( 父游标和子游标的生成应该有先后顺序吧? ) ? 为什么要称为 optimizer goal (目标一般指还没有实现的) ?
问题2 :
在SQL解析过程中,在library cache中找到对应的Hash Bucket之后,在后面object handle 链表中既包含了父游标,也包含了子游标 ?
根据上面的文章,每个 PARENT CURSOR至少包含一个HEAP0,里面存放环境、状态和绑定变量的信息 。 而parent cursor是由一个handle和一个object组成,可以通过在库缓存hash table中的hash value查找到handle, 而它的object 包含了指向它的每个 "child" cursor的指针 。
每个child cursor也是由一个handle和一个object构成. child object 又是由两个heap即heap0及heap6 组成, 其中Heap0包含所有的针对SQL语句每个版本的标示信息(比如Environment, Statistics, Bind Variables等,比如绑定变量值不同的长度可能导致sql解析版本的不同),Heap6包含执行计划 。 [这一段翻译自Oracle相关文档]
上面的红色部分中的父游标包含的Heap0 和它的子游标的Heap0 应该不是一个Heap吧 ? 他们包含的信息都有 Environment, Bind Variables等 。 父游标中到底含有哪些东西 ?
[ 本帖最后由 tolywang 于 2010-10-29 16:37 编辑 ]
1. 父游标里主要包含两种信息: SQL文本以及 优化目标(optimizer goal) , 子游标包括游标所有的信息,比如具体的执行计划,绑定变量等。
摘自 <>
2. parent cursor包含了SQL TEXT和相关的hash value,v$sqlarea中的每一行代表了一个parent cursor,根据address表示了其内存地址。
来自 http://space.itpub.net/50897/viewspace-584304
3. PARENT CURSOR包含一个KGLHD,一个KGLOB和1-多个KGLNA。KGLOB指向SUBHEAP(每个PARENT CURSOR至少包含一个HEAP0,里面存放环境、状态和绑定变量的信息)。 每个Parent CURSOR至少有一个CHILD CURSOR,CHILD CURSOR中包含:CURSOR相关环境,CURSOR状态、绑定变量,执行计划等。每个CHILD CURSOR包含一个KGLHD,一个KGLOB和SUBHEAP。在每个CHILD CURSOR中,包含一个HEAP 6,里面存放的是执行计划。
来自 http://www.oraclefans.cn/forum/showblog.jsp?rootid=5553
问题1:
v$sqlarea中的每一行代表了一个parent cursor , 父游标中包含sql文本,根据v$sqlarea中SQL_TEXT可以看出。 父游标中包含的内容都会在 v$sqlarea 中体现吗 ? 如果是这样, 那么optimizer goal 具体到指什么 ? 如下表格中是 v$sqlarea 中的部分字段, 比如buffer_gets , 是统计 Sum of buffer gets over all child cursors , 在这个父游标相关的v$sqlarea视图中已经有了子游标相关的数值, 也就是说是等子游标完全生成后,才会将父游标信息存入v$sqlarea ,同时子游标信息写入v$sql ( 父游标和子游标的生成应该有先后顺序吧? ) ? 为什么要称为 optimizer goal (目标一般指还没有实现的) ?
DISK_READS | NUMBER | Sum of the number of disk reads over all child cursors |
DIRECT_WRITES | NUMBER | Sum of the number of direct writes over all child cursors |
BUFFER_GETS | NUMBER | Sum of buffer gets over all child cursors |
CPU_TIME | NUMBER | CPU time (in microseconds) used by this cursor for parsing/executing/fetching |
ELAPSED_TIME | NUMBER | Elapsed time (in microseconds) used by this cursor for parsing/executing/fetching |
问题2 :
在SQL解析过程中,在library cache中找到对应的Hash Bucket之后,在后面object handle 链表中既包含了父游标,也包含了子游标 ?
根据上面的文章,每个 PARENT CURSOR至少包含一个HEAP0,里面存放环境、状态和绑定变量的信息 。 而parent cursor是由一个handle和一个object组成,可以通过在库缓存hash table中的hash value查找到handle, 而它的object 包含了指向它的每个 "child" cursor的指针 。
每个child cursor也是由一个handle和一个object构成. child object 又是由两个heap即heap0及heap6 组成, 其中Heap0包含所有的针对SQL语句每个版本的标示信息(比如Environment, Statistics, Bind Variables等,比如绑定变量值不同的长度可能导致sql解析版本的不同),Heap6包含执行计划 。 [这一段翻译自Oracle相关文档]
上面的红色部分中的父游标包含的Heap0 和它的子游标的Heap0 应该不是一个Heap吧 ? 他们包含的信息都有 Environment, Bind Variables等 。 父游标中到底含有哪些东西 ?
[ 本帖最后由 tolywang 于 2010-10-29 16:37 编辑 ]
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-677098/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-677098/