12
返回列表 发新帖
楼主: tolywang

[讨论] library cache中parent cursor 及child cursor 问题

[复制链接]
论坛徽章:
71
2015年新春福章
日期:2015-03-06 11:57:312013年新春福章
日期:2013-02-25 14:51:24双黄蛋
日期:2013-01-06 13:31:18蜘蛛蛋
日期:2013-01-06 10:26:08茶鸡蛋
日期:2012-11-21 19:35:23ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07版主2段
日期:2012-05-15 15:24:11铁扇公主
日期:2012-02-21 15:02:402012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
11#
 楼主| 发表于 2010-11-4 10:37 | 只看该作者
原帖由 Yong Huang 于 2010-11-3 23:28 发表
> 第二种是A发出的语句经过对象名称转化后和在shared pool 中的SQL文本一模一样,父游标可以共享,

Again, if the initial SQL text doesn't match, the parent cursor is not shared. "语句经过对象名称转化后" is done in the second step, which already passed the initial text match.

Note:296377.1 has the words "The fundementals are that the parent is not shared, it is the children which determine shareability." I think the first part is meaningless, or should not be understood literally. I say the parent is shared only in the sense that this same SQL (same in terms of SQL text or hash value or sql ID) is executed or attempted to execute another time.

Yong Huang




是的,我错误地将base objects 的转换这一步放在了查找共享父游标之前,查看了V$SQL_SHARED_CURSOR , 所有相关 mismatch 的内容都是针
对 the existing child cursor , 包括 TRANSLATION_MISMATCH (The base objects of the existing child cursor do not match), 可以看
出各种 mismatch 已经是在针对子游标共享需要的条件了 。  查找是否有共享的父游标和硬解析是两个不同的过程,父游标共享与否和硬解析没有直接关系,
子游标的共享状态决定软硬解析 。     



更正:

第一种是A发出的原始SQL语句和其他用户B之前发出的SQL文本一模一样,父亲游标可以共享,但是因为优化器环境设置不同( OPTIMIZER_MISMATCH),  绑定变量的值的长度在第二次执行的时候发生显著
的变化(BIND_MISMATCH) , 授权关系不匹配(AUTH_CHECK_MISMATCH ) 或者 基础物件转换不匹配(TRANSLATION_MISMATCH) 等导致子游标不能共享,需要新生成一个子游标 。 这与SQL共享(即游标共享)
是有关系的 。 这种情况下的执行计划可能不同,也可能相同((我们可以通过plan_hash_value看出));   这里因为除SQL TEXT之外的其他条件不符合,所以reload 也不会发生 。子游标就是new create and load,
应该是硬解析 。具体的mismatch可以查询 V$SQL_SHARED_CURSOR .  

第二种是A发出的原始SQL语句和与在shared pool 中的SQL文本一模一样,父游标可以共享,子游标不存在所谓的mismatch ,  目前也存在于库缓存中,可以共享子游标,那么应该是软解析 。

第三种,父游标可以共享, 不同的是,子游标本来是可以共享的,但是目前被交换出(aged out)库缓存,这时会reload 子游标,也就是利用父游标的信息重新构造出一个子游标 ,Oracle已经知道应该共享哪
个子游标,只是它暂时被交换出库缓存, reload应该不属于硬解析(但是也需要消耗硬件资源), 是否属于软解析呢 ? 因为比较消耗硬件资源, 应该也不是软解析。虽然被aged out 出库缓存,但是可能某个
地方会记录这个子游标的一些信息,而不需要重新生成子游标的相关信息(比如执行计划或执行计划之外的其他辅助信息等),  而只需要reload (消耗的资源介于硬解析和软解析之间 ? )。

[ 本帖最后由 tolywang 于 2010-11-4 11:46 编辑 ]

使用道具 举报

回复
论坛徽章:
9
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522010广州亚运会纪念徽章:击剑
日期:2010-11-03 11:00:36ITPUB十周年纪念徽章
日期:2011-11-01 16:25:512012新春纪念徽章
日期:2012-01-04 11:56:19奥运会纪念徽章:摔跤
日期:2012-08-21 10:04:04优秀写手
日期:2014-02-15 06:00:132014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08马上加薪
日期:2014-05-19 11:17:08
12#
发表于 2010-11-8 02:55 | 只看该作者
原帖由 tolywang 于 2010-11-4 10:37 发表
  
第一种是A发出的原始SQL语句和其他用户B之前发出的SQL文本一模一样,父亲游标可以共享,但是因为优化器环境设置不同( OPTIMIZER_MISMATCH),  绑定变量的值的长度在第二次执行的时候发生显著
的变化(BIND_MISMATCH) , 授权关系不匹配(AUTH_CHECK_MISMATCH ) 或者 基础物件转换不匹配(TRANSLATION_MISMATCH) 等导致子游标不能共享,需要新生成一个子游标 。 这与SQL共享(即游标共享)
是有关系的 。 这种情况下的执行计划可能不同,也可能相同((我们可以通过plan_hash_value看出));   这里因为除SQL TEXT之外的其他条件不符合,所以reload 也不会发生 。子游标就是new create and load,
应该是硬解析 。具体的mismatch可以查询 V$SQL_SHARED_CURSOR .  

第二种是A发出的原始SQL语句和与在shared pool 中的SQL文本一模一样,父游标可以共享,子游标不存在所谓的mismatch ,  目前也存在于库缓存中,可以共享子游标,那么应该是软解析 。

第三种,父游标可以共享, 不同的是,子游标本来是可以共享的,但是目前被交换出(aged out)库缓存,这时会reload 子游标,也就是利用父游标的信息重新构造出一个子游标 ,Oracle已经知道应该共享哪
个子游标,只是它暂时被交换出库缓存, reload应该不属于硬解析(但是也需要消耗硬件资源), 是否属于软解析呢 ? 因为比较消耗硬件资源, 应该也不是软解析。虽然被aged out 出库缓存,但是可能某个
地方会记录这个子游标的一些信息,而不需要重新生成子游标的相关信息(比如执行计划或执行计划之外的其他辅助信息等),  而只需要reload (消耗的资源介于硬解析和软解析之间 ? )。


学习了。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表