查看: 63644|回复: 18

[讨论] select 大结果集如何存放

[复制链接]
论坛徽章:
2
2012新春纪念徽章
日期:2012-01-04 11:51:22茶鸡蛋
日期:2012-12-23 22:48:29
跳转到指定楼层
1#
发表于 2011-10-28 18:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
oracle执行select操作,返回的结果集存放在什么位置?结果集中保存的是rowid集合还是真实的数据?返回的结果集是放在PGA区域么?如果返回的是真实的数据,那么如果数据量过大会不会造成内存溢出?请各位高手解答
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
2#
发表于 2011-10-28 22:52 | 只看该作者
If it's a simple select * from table, the data goes straight to the client. If the SQL has some intermediate steps for data processing, such as select count(*) from table, UGA will be used. In dedicated config, UGA is part of PGA.

Yong Huang

使用道具 举报

回复
论坛徽章:
3
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
3#
发表于 2011-10-29 23:33 | 只看该作者
perfect !

使用道具 举报

回复
论坛徽章:
2
2012新春纪念徽章
日期:2012-01-04 11:51:22茶鸡蛋
日期:2012-12-23 22:48:29
4#
 楼主| 发表于 2011-10-29 23:59 | 只看该作者
本帖最后由 napolone1983 于 2011-10-30 00:05 编辑
Yong Huang 发表于 2011-10-28 22:52
If it's a simple select * from table, the data goes straight to the client. If the SQL has some inte ...


有些迷茫啊,我查询10万条数据(一个简单的select语句),难道也直接返回到客户端么?如果所有的结果集直接返回到客户端,那要游标干什么啊?
我原本理解的是:游标中会保存查询结果集的rowid信息,而结果集所需要的数据块被载入到了SGA中,当用户通过游标顺序读取的时候,游标才从SGA的缓存数据块中获取行记录,如果结果集较大或者说需要载入的数据块交多,oracle可能会使用虚拟内存。
请各位牛人帮忙解释一下,我上述描述是否正确?


使用道具 举报

回复
论坛徽章:
4
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51灰彻蛋
日期:2011-11-07 07:32:08蛋疼蛋
日期:2011-12-26 14:19:11蛋疼蛋
日期:2012-04-07 01:24:00
5#
发表于 2011-10-30 06:42 | 只看该作者
本帖最后由 chicheng_cn421 于 2011-10-30 06:44 编辑
napolone1983 发表于 2011-10-29 23:59
有些迷茫啊,我查询10万条数据(一个简单的select语句),难道也直接返回到客户端么?如果所有的结果集 ...

应该是这样的:
当语句执行完成之后,查询到的数据还是在服务器进程中,还没有被传送到客户端的用户进程。所以,在服务器端的进程中,有一个专门负责数据提取的一段代码。他的作用就是把查询到的数据结果返回给用户端进程,从而完成整个查询动作。

在我的博客里有一篇收藏的网上的文章,比较详细地分析了Oracle select的整个过程,可以看一下。
【SQL】见微知著 从Select语句看Oracle查询原理(转载)


使用道具 举报

回复
论坛徽章:
2
2012新春纪念徽章
日期:2012-01-04 11:51:22茶鸡蛋
日期:2012-12-23 22:48:29
6#
 楼主| 发表于 2011-10-30 12:19 | 只看该作者
本帖最后由 napolone1983 于 2011-10-30 12:22 编辑
chicheng_cn421 发表于 2011-10-30 06:42
应该是这样的:
当语句执行完成之后,查询到的数据还是在服务器进程中,还没有被传送到客户端的用户进程 ...


多谢回复!
其实我想知道的是结果集查询出来之后,大数据量的存放以及游标读取的过程(按照OO分析的话,游标包含什么属性,都有哪些方法),而不是整个查询的过程。
各位高手给提供点资料也可以

使用道具 举报

回复
论坛徽章:
4
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51灰彻蛋
日期:2011-11-07 07:32:08蛋疼蛋
日期:2011-12-26 14:19:11蛋疼蛋
日期:2012-04-07 01:24:00
7#
发表于 2011-10-30 22:10 | 只看该作者
napolone1983 发表于 2011-10-30 12:19
多谢回复!
其实我想知道的是结果集查询出来之后,大数据量的存放以及游标读取的过程(按照OO分析的话 ...

呵呵,这个我也不是很清楚,期待高人指导

使用道具 举报

回复
论坛徽章:
86
2015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11优秀写手
日期:2013-12-18 09:29:11日产
日期:2013-10-17 08:44:39马自达
日期:2013-08-26 16:28:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-23 16:55:51马上有房
日期:2014-02-19 11:55:14
8#
发表于 2011-10-31 08:42 | 只看该作者
对于直接获取的数据,没有必要额外存放,数据已经在那里(buffer cache, logical read/disk,phisical read logical read)
对于中间结果,例如Huang版说的,或者,排序结果、数组之类的,应该在PGA或磁盘中

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
9#
发表于 2011-10-31 23:39 | 只看该作者
> 游标中会保存查询结果集的rowid信息,而结果集所需要的数据块被载入到了SGA中

Of course the data blocks will be scanned into SGA (buffer cache specifically), unless it's a direct path read. Your original question is whether the data will be in PGA. I already answered that. But no matter whether it's select *... or select count(*) ..., the table data must go to the buffer cache first (except for parallel read, and a few other special cases of direct path read).

Yong Huang

使用道具 举报

回复
论坛徽章:
4
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51灰彻蛋
日期:2011-11-07 07:32:08蛋疼蛋
日期:2011-12-26 14:19:11蛋疼蛋
日期:2012-04-07 01:24:00
10#
发表于 2011-11-1 09:02 | 只看该作者
本帖最后由 chicheng_cn421 于 2011-11-1 09:06 编辑

学习了^_^


使用道具 举报

回复

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

本版积分规则 发表回复

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