PGA的概念

一、 PGA

  1. PGA概念
    1. 一个操作系统进程或线程专用的内存,不允许系统中的其他进程或线程访问。
    2. 采用专用服务器连接,UGA包含在PGA中,采用共享服务器连接,UGA包含在SGA中
  2. Oracle9i release 1起,采用两种管理PGA中非UGA的内存
    1. 手动PGA管理
    2. 自动PGA管理
    3. 在oracle9i中,采用共享服务器连接,只能手工管理PGA内存
    4. Oracle 10g release 1中,都可以采用
  3. PGA内存管理受数据库初始参数WORKAREA_SIZE_POLICY的控制,在会话级修改,oracle9i release 2及以上版本中,参数值AUTO,在oracle9i release 1中,参数值MANUAL
  4. Oracle11g ,开始启用memory_target自动管理内存。

 

  -170

 

二、PGA手工管理

如果采用手工PGA内存管理,有些参数对PGA大小的影响最大,PGA中除了会话PL/SQL、表和其他变量分配的内存以外的部分,这些参数:

  1. SORT_AREA_SIZE:在数据输出到磁盘钱,用于对数据排序的RAM总量。
  2. SORAT_AREA_RETAINED_SIZE:排序完成后用于保存已排序数据的内存总量。
  3. HASH_AREA_SIZE:服务器进程在内存中存储散列表所用的内存量。

在使用*_AREA_SIZE参数时,记住重要的几点:

  1. 这些参数控制SORT、HASH的操作所用最大内存量
  2. 一个查询可能有多个操作,这些操作可能都要使用这个内存,这样会创建多个排序/散列区
  3. 内存都是根据需要来分配的。

 

三、自动PGA内存管理

从Oracle9i Release 1起,引入自动PGA内存管理。

建立自动PGA内存管理,需要为两个实例初始化参数确认适当的值,这两个参数是:

  1. WORKAREA_SIZE_POLICY:这个参数可以设置为MANUAL或AUTO。如MANUAL,PGA手工管理,AUTO为PGA自动管理,根据数据库的工作负载而变化。Alter session set WORKAREA_SIZE_POLICY=AUTO;
  2. PGA_AGGREGATE_TARGET:控制实例为完成数据排序/散列的所有工作区总共分配多少内存。ALTER SESSION SET PGA_AGGREGATE_TARGET=具体的值

 

  1. 确认如何分配内存

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)

posted @ 2012-08-14 07:03  gull  Views(472)  Comments(0)    收藏  举报