PGA的概念
一、 PGA
- PGA概念
- 一个操作系统进程或线程专用的内存,不允许系统中的其他进程或线程访问。
- 采用专用服务器连接,UGA包含在PGA中,采用共享服务器连接,UGA包含在SGA中
- Oracle9i release 1起,采用两种管理PGA中非UGA的内存
- 手动PGA管理
- 自动PGA管理
- 在oracle9i中,采用共享服务器连接,只能手工管理PGA内存
- Oracle 10g release 1中,都可以采用
- PGA内存管理受数据库初始参数WORKAREA_SIZE_POLICY的控制,在会话级修改,oracle9i release 2及以上版本中,参数值AUTO,在oracle9i release 1中,参数值MANUAL
- Oracle11g ,开始启用memory_target自动管理内存。
-170
二、PGA手工管理
如果采用手工PGA内存管理,有些参数对PGA大小的影响最大,PGA中除了会话PL/SQL、表和其他变量分配的内存以外的部分,这些参数:
- SORT_AREA_SIZE:在数据输出到磁盘钱,用于对数据排序的RAM总量。
- SORAT_AREA_RETAINED_SIZE:排序完成后用于保存已排序数据的内存总量。
- HASH_AREA_SIZE:服务器进程在内存中存储散列表所用的内存量。
在使用*_AREA_SIZE参数时,记住重要的几点:
- 这些参数控制SORT、HASH的操作所用最大内存量
- 一个查询可能有多个操作,这些操作可能都要使用这个内存,这样会创建多个排序/散列区
- 内存都是根据需要来分配的。
三、自动PGA内存管理
从Oracle9i Release 1起,引入自动PGA内存管理。
建立自动PGA内存管理,需要为两个实例初始化参数确认适当的值,这两个参数是:
- WORKAREA_SIZE_POLICY:这个参数可以设置为MANUAL或AUTO。如MANUAL,PGA手工管理,AUTO为PGA自动管理,根据数据库的工作负载而变化。Alter session set WORKAREA_SIZE_POLICY=AUTO;
- PGA_AGGREGATE_TARGET:控制实例为完成数据排序/散列的所有工作区总共分配多少内存。ALTER SESSION SET PGA_AGGREGATE_TARGET=具体的值
- 确认如何分配内存
a) PGA_AGGREGATE_TARGET是一个上限目标,而是不是启动数据库时预分配的内存大小。
b) 串行(非并行查询)会话会使用PGA_AGGREGATE_TARGET中的很少一部分,大约5%或者更少。
c) 一个并行查询最多可以使用PGA_AGGREGATE_TARGET的30%,每个并行进程会在这30%中得到自己的那一份。
d) 随着服务器上工作负载的增加,分配给各个工作区的PGA内存量会减少。
四、系统全局区
每个oracle实例有一个很大的内存结构,称为系统全局区(system global area,SGA)这是一个庞大的共享内存结构
Merge into sess_stats
using
(
select a.name,b.value from v$statname a,v$sesstat b where A.STATISTIC#=b.statistic# and b.sid=:sid
and (a.name like '%ga%' or a.name like '%direct temp%')
) curr_stats on (sess_stats.name=curr_stats.name) when matched then update set diff=curr_stats.value-
sess_stats.value,value=curr_stats.value when not matched then insert(name ,value,diff) values(curr_stats.name,curr_stats.value,null)

浙公网安备 33010602011771号