关于硬解析

老师您的PPT上有下面这么一段我看不明白
.硬解析
1、客户端发出一条SQL语句,SQL语句进入共享池

该SQL语句以及相关的辅助信息组成游标
2、对SQL语句进行hash运算,得到一个hash值,转入相应的bucket中去
3、对bucket进行遍历,查找是否存在这条SQL语句
4、如果不存在这条语句

           1、获得shared pool latch,然后在shared pool中进行chunk链条的遍历,
找到合适的chunk,之后释放shared pool latch,chunk进入library cache中         ----------我想问这个chunk的大小oracle是怎么判断的,寻找chunk不是应该在硬解析之后进行的吗?想不明白怎么在这一步就有了。

           2、硬解析开始

标签: 暂无标签
原始人

写了 32 篇文章,拥有财富 297,被 1 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

P6 | 发表于 2010-11-12 09:30:08
这个和开发上说的游标是两回事。
开发上的游标说的是一个结果集,而shared pool中的游标,说的是可执行对象。
回复

使用道具

P6 | 发表于 2010-11-10 08:44:44
一个游标由多个chunk组成,首先申请的是父游标的chunk。父游标中存放的是sql语句,而这对于oracle来说,是可以判断的。
子游标需要单独的chunk,只有在解析以后才需要去申请。
回复

使用道具

P6 | 发表于 2010-11-10 08:50:21
oracle什么先hash、然后遍历,如果遍历失败,再去进行语法检查等呢?
Oracle有两个假设:
1、生产上输入的语句,都是内嵌在程序中的,几乎都是正确的。
2、shared pool的命中率足够高,因为既然提供了缓存,那么就要充分的使用缓存,这也是oracle对使用者的要求和希望
因此出现了上面的顺序,我们理解了以后,一定要最大限度的进行共享
生产上经常出现解析cpu占cpu的比例达到20%以上,因此解析还是相对消耗资源的,因此要做好shared pool的共享。
硬解析—软解析—软软解析
回复

使用道具

P4 | 发表于 2010-11-10 21:49:14
嗯,谢谢老师。
还有PPT上说的是硬解析结束后产生父游标和子游标。是不是父游标应该比子游标先生成啊?
回复

使用道具

P4 | 发表于 2010-11-11 14:43:33
本帖最后由 kevin.zhang 于 2010-11-11 14:50 编辑

我也正好想询问下,这个父子游标的称呼是怎么来的。这个父子游标的概念和我们平时所讲SQL的游标是一个东西吗?还是说只是名字里有游标这2个字而已,其实和游标并没有什么联系,只是指针而已。因为我的概念里,游标是存在pga中的。参考:
ask tom :cursor
回复

使用道具

P5 | 发表于 2010-11-11 19:30:54
两个用户
User a 有一张表 test
user b 也有一张表test
两张表记录不同

对于文本 select * from test 根据语法来讲 A用户执行也可以 B用户执行也可以  都不报错 因为两个用户都有名为test的表。

那么Oracle生成了一个父游标与文本对应。
但是两张表的所有者是不一样的。也就是说语句运行环境不同。那么分别生成一个子游标。
一个游标访问的是user A的test 表
一个游标访问的是user b的test 表。

这里面的游标指的是对SQL本身在LIBRARY CACHE中生成的内存块的内容

而在SQL中的游标是指向PGA中内存的一个handler
这里说到了句柄,所谓的句柄个人理解就是一个指针加其他信息的结构体(集合)。
为什么说他是一个句柄而不是指针呢。因为游标是有属性的,这些属性有%found %notfound  %open %rowcount 这些指针是不能提供的。指针只能提供这些数据的第一个位置(入口)。
为什么不说游标是一个集合呢?
因为游标是逐行处理的。处理完这一行后,他会指向下一行。
如果是集合那么就和数组一样了。
数组是可以批量赋值的,批量使用的。
select *
bulck collect into emp_row
from emp ;
数组也可以不逐条引用。
varry(3)那么就是这条数组序号为3的那一条。
这些特性游标是做不到的。
我们在使用SQL的游标的时候必须要Open fetch close

这和C一样。指针不销毁他就一直存在,你再次引用就是个野指针。
不过Oracle不存在再次引用罢了。你再次引用的时候会报错的
大致是 cursor already open 。

这些都是个人的理解。可能不对,我借用了一些C的概念。(大学学的,也没太学明白)。
希望大家批评指正啊。。
回复

使用道具

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈