认识PGA及PGA_AGGREGATE_TARGET [final]

本文详细介绍了Oracle数据库中的程序全局区(PGA)内存组成及其主要组成部分,包括会话内存、私有SQL区等内容,并探讨了PGA的主要消费者以及其对用户体验的影响。

一, PGA内存组成  
程序全局区PGA是供服务进程存储数据及控制信息的内存区域, PGA可分固定PGA和
可变PGA。可变PGA是一个内存堆,PGA的可变区实际上是我们最为关注的PGA部分。
通过x$ksmpp可以查询可变PGA的分配和使用情况。它主要由:
1). 会话内存:用于存放会话的登录信息以及其他相关信息
2). 私有sql区
  1.1) 永久区域: 这里存放了相同SQL语句多次执行时都需要的一些游标信息,比如绑定
       变量信息、数据类型转换信息,SQL声明等。这部分内存只有在游标被关闭时才会被
释放。
  1.2) sql work area:含sort区、hash区等,对于DML事务,sql执行完毕就释放该区域;
       对于select则是记录返回后或者查询取消时释放。 这部分大小依赖于SQL复杂度,
       sort,hash使用及处理的行数及行的大小 等因素 。
3)  游标和sql区域: 这里的游标是一块内存,不是我们常指的"指针"。一个Oracle预编译程序或OCI程序的应用开发人员能够很明确的打开一个游标,或者控制一块特定的私有SQL区,将他们作为程序运行的命名资源。另外,oracle隐含的为一些SQL语句产生的递归调用(读取数据字典信息)也使用共享SQL区。

PGA中我们最需要关注的就是私有SQL区域中的运行时区域(sql work area)。


二,PGA的主要消费者
oracle的应用程序或者用户的应用程序在执行时,都可能显示或者隐式地打开cursor,
打开cursor就需要分配sql area,私有sql区在cursor打开时分配,关闭时释放,实际上,数据库的主要活动就是cursor的活动,简单说来,用户进程的任务执行和cursor的使用是PGA的主要消耗者。

server process去data dictionary cache查询,将需要的读到database buffer cache,
然后,在PGA构造游标(结果集的指针),每一根指针都指向一个rowid,如果需要排序,
连接,一致性读,则只需要对指针进行操作。所以,PGA是用户最直接的使用体验。

用户所发出的请求,执行时,是在pga中执行(只有数据在buffer cache中)。若在pga
中命中(当某个session第三次执行相同的SQL语句时,则会把该SQL语句的游标信息转移到该session的PGA中),则无须软解析或者硬解析,此时俗称为软软解析。 PGA中的游标指向buffer cache中的数据行,返回时是一批一批返回,而非一条条。

-- 未完, 见评论部分 。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-759096/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-759096/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值