oracle 的sql在SGA和PGA是如何交互的?

[复制链接]
查看11 | 回复9 | 2010-11-22 15:43:49 | 显示全部楼层 |阅读模式
数据库是Dedicated模式的,sql从客户端发出后,在PGA是如何处理的,在SGA呢?
哪位大侠能不能讲一下里面的具体过程?


回复

使用道具 举报

千问 | 2010-11-22 15:43:49 | 显示全部楼层
过程挺复杂的,等高手吧。
回复

使用道具 举报

千问 | 2010-11-22 15:43:49 | 显示全部楼层
原帖由 db_wang 于 2011-1-13 14:13 发表
数据库是Dedicated模式的,sql从客户端发出后,在PGA是如何处理的,在SGA呢?
哪位大侠能不能讲一下里面的具体过程?


我简单的说一下自己的理解
pga里面存放的是进程的信息,也就是说当连接建立的时候,进程的信息就产生了放在pga里面,比如进程占用的内存等等物理信息,还有session的cursor信息,如果有排序或者hash操作,也会在这里存放数据。
sga里面主要是两块,buffer cache和shared pool,buffer cache里面是数据,shared pool里面主要存放的是执行过的curcor的执行计划以及一些存储过程。
具体过程就是建立session -->分析语法 ---> 产生执行计划(硬解析or软解析)---> 执行---> 返回结果
大致是这样,但是具体还有很多复杂的处理过程,很多oracle书籍都有相关的论述,你可以找来看一下
回复

使用道具 举报

千问 | 2010-11-22 15:43:49 | 显示全部楼层
如果在详细一点的话应该是
UGA负责会话
PGA负责排序和别的
而且专用服务器和共享服务器的UGA分配方式是不一样的
回复

使用道具 举报

千问 | 2010-11-22 15:43:49 | 显示全部楼层
既然Sort和Hash-Join是在PGA的私有SQL区完成的,那数据肯定要经过PGA,如果是第一次,这个数据怎么样进入
SGA的Buffer Cache的?不是第一次,这个数据怎么从SGA和磁盘取出来的?
回复

使用道具 举报

千问 | 2010-11-22 15:43:49 | 显示全部楼层
http://download.oracle.com/docs/ ... 8/memory.htm#i14490
[ 本帖最后由 sundog315 于 2011-1-14 09:36 编辑 ]
回复

使用道具 举报

千问 | 2010-11-22 15:43:49 | 显示全部楼层
原帖由 sundog315 于 2011-1-14 09:33 发表
http://download.oracle.com/docs/ ... 8/memory.htm#i14490

打不开


回复

使用道具 举报

千问 | 2010-11-22 15:43:49 | 显示全部楼层
不知道这样理解行不行,HASH-JOIN是从SGA取已经缓存到里面的2张表或者几张表的数据到PGA里面构建一张新的HASH表
回复

使用道具 举报

千问 | 2010-11-22 15:43:49 | 显示全部楼层
貌似不对,HASH-JOIN的过程应该不是这样的,MARK下
回复

使用道具 举报

千问 | 2010-11-22 15:43:49 | 显示全部楼层
这样理解可以吗?
UGA是用户全局区,用户所做的一切都会在UGA中被接受、初始化、执行,其中包括SQL语句的执行。
PGA是进程全局区,包括oracle的一些进程,以及SQL语句执行时产生的排序,以及其他东西。
SGA是系统全局区,包括一些共享池、连接池大小,等等。
根据oracle连接方式的不同(专用连接方式和共享连接方式),UGA可能存在PGA或者SGA当中。不管UGA存在哪里,SQL语句的执行都会用到这三个全局区。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行