当客户进程访问oracle服务器时,会在oracle服务器端为用户进程分配相应的服务进程,并且为该服务进程分配相应
的内存空间来存放其数据和控制信息,每一个后台进程也需要为其分配专用的存储空间。也就是PGA
PGA是非共享的内存空间,当建立服务进程或者后台进程时,oracle会自动为其分配PGA,而当服务进程或后台进程终止时,
oracle会自动释放PGA的内存空间。
PGA的三大部分
1.私有sql区
私有sql区(private sql area)包含绑定信息(bind information)及运行时内存结构(runtime memory structure等数据。
每个提交了sql语句的会话都有一个私有sql区。每个提交了相同sql语句的用户都有自己的私有sql区,但他们使用一个共享sql区。即多个私有sql区可以和一个共享sql区相联系。
游标的私有sql区又分为两个区域,其生命周期有所不同
a.持续数据区,包含绑定信息之类的数据。此区只在游标关闭时才会释放
b.运行时间去,当执行请求的第一步创建,对于Insert,update和delete,这个区域当语句执行后释放。而对于查询,只有所有行或查询取消,该区域才会释放
私有sql区
对使用专有服务器模式私有sql区位于服务进程的PGA区
对共享服务器模式私有sql区位于SGA.,私有sql区管理由用户进程完成
而对于共享服务器和专用服务器的区别
专用服务器:对于每个用户,oracle服务器对每个用户进程执行一个专有的服务进程
共享服务器,一个共享服务器进程响应多个客户端的请求。
2.会话内存
会话内存是为会话变量和会话有关信息分配的内存。对共享服务器模式,会话内存也是共享的。
3.sql工作区
用于排序(sort)哈希连接(hash join)位图(bitmap)合并和位图创建。该区域大小即可控制也可以自动调整。
oracle9i开始,通过设置初始化参数WORKAREA_SIZE_POLICY(默认为true)和PGA_AGGREGATE_TARGTET,工作区可以自动的进行全局管理。
PGA_AGGREGATE_TARGTET设置实例的PGA目标重量,可以动态的修改。当设置了此参数,所有的工作区即变为自动修改。