ORACLE PGA(程序全局区)

SGA(System Global Area),即系统全局区,管理数据库buffer cache,java,stream的内存区html

PGA (Process Global Area),即程序全局区,主要用于管理进程的内存区java

UGA(User Global Area),即用户全局区,处理用户会话相关信息的内存区sql

CGA(Call Global Area),即调用全局区,处理如排序、HASH JOIN、位图合并等工做的内存区数据库

 

若是采用专用服务模式(Dedicated Server Connection)那么UGA在PGA中分配,若是采用共享服务模式(Shared Server Connection),那么UGA在SGA区的Large pool中分配。bash

 

UGA组成:session

UGA=User Session+Cursor state+Sort Area Retained数据结构

 

User Session:用户会话,存放用户权限、角色、性能统计等信息。ide

Cursor state(私有SQL区):即一个句柄,或称为指针、引用指向Sql私有区。而后私有Sql区又指向共享Sql区。私有Sql区分两个部分:性能

固定部分:绑定信息,数据结构信息,指针。随session的建立而建立,结束而释放。指针

动态部分:执行sql的中间结果集,如多表关联、排序。随sql建立而建立,结束而释放。

 

专用模式下的PGA组成:

PGA=UGA+CGA

 

PGA的管理模式:

  • 手动管理模式,用户指定排序区和散列区所使用的内存,每一个链接使用相同的内存。

  • 自动管理模式,设定PGA的总量,由Oracle根据系统负载自行决定分配。

 

PGA内存管理模式由WORKAREA_SIZE_POLICY控制

设为MANUAL,启动手动内存管理。

设为AUTO,而且PGA_AGGREGATE_TARGET不为0时,启动自动内存管理。

 

手动PGA内存管理受三个参数的影响最大

SORT_AREA_SIZE 排序区,用于排序时存放排序数据的内存区,属于PGA

SORT_AREA_RETAINTED_SIZE 排序完成后用于保存排序数据的内存,属于UGA

HASH_AREA_SIZE 储存散列表的内存

 

这三个参数设置的状况以下:

SORT_AREA_SIZE=SORT_AREA_RETAINTED_SIZE

则排序在内存中进行,且排序结果均保存在内存中。

SORT_AREA_SIZE>SORT_AREA_RETAINTED_SIZE

则在SORT_AREA_SIZE规定的大小中排序,并保留SORT_AREA_RETAINTED_SIZE规定大小的排序数据,超出部分排序数据写到临时表中,排序完成后,把排序数据存放在SORT_AREA_RETAINTED_SIZE,最终反馈给终端。若是SORT_AREA_RETAINTED_SIZE设置为0,则与第一种状况相同。

 

当一个多个结果集关联时,会用到HASH_AREA_SIZE,两个集合中较小的一个会散列到内存中做为驱动表,散列区放不下的部分都会经过联结键存储在临时表空间中。HASH_AREA_SIZE太小会影响集合关联时的性能。

 

备注:

       1)如须要排序的数据量大于SORT_AREA_SIZE,Oracle进行分批排序,将排序的结果存到临时表空间中,而后对剩余部分进行排序。最后还须要对保存在临时表中的已排序数据进行再排序,由于每次保存到临时表空间中的已排序数据只是部分数据的排序,对于总体来讲只是局部排序。

        2)参数的限制仅是对某个操做的限制,一个查询能够有多个操做,例如一个查询有10个排序,若是SORT_AREA_SIZE限制为5M,则10个排序占用50M排序内存。

 

设置PGA自动管理

SQL> alter system set WORKAREA_SIZE_POLICY=auto;
SQL> alter system set PGA_AGGREGATE_TARGET=<size>;

 

查看PGA建议视图

SELECT trunc(pga_target_for_estimate / 1024 / 1024) pga_target_for_estimate,
       to_char(pga_target_factor * 100, '999.9') || '%' pga_target_factor,
       trunc(bytes_processed / 1024 / 1024) bytes_processed,
       trunc(estd_extra_bytes_rw / 1024 / 1024) estd_extra_bytes_rw,
       to_char(estd_pga_cache_hit_percentage, '999') || '%' estd_pga_cache_hit_percentage,
       estd_overalloc_count
  FROM v$pga_target_advice;

 

 

参考 http://www.2cto.com/database/201309/242229.html

相关文章
相关标签/搜索