PGA的手动和自动管理*
2011-10-09 18:42
155 查看
pga_aggretarget_target是自动pga管理的新特性,什么是pga呢?pga全称是 program global area (程序全局区) ,其参数用来控制pga的总体期望目标。从oracle 10g开始对共享服务器和专有服务器同时生效。
固定PGA和可变PGA(或者叫PGA堆,PGA Heap【堆——Heap就是一个受管理的内存区】)。固定PGA和固定SGA类似,它的大小时固定的,包含了大量原子变量、小的数据结构和指向可变PGA的指针。
可变PGA时一个内存堆。它的内存段可以通过视图X$KSMPP(另外一个视图X$KSMSP可以查到可变SGA的内存段信息,他们的结构相同)查到。PGA堆包含用于存放X$表的的内存(依赖与参数设置,包括DB_FILES、CONTROL_FILES)。
总的来说,PGA的可变区中主要分为以下三部分内容:
o 私有SQL区;
o 游标和SQL区
o 会话内存
PGA/UGA一般保存了用户的变量,权限,堆栈,排序空间。hash jion空间等信息。
在专有服务模式下,推荐使用PGA_AGGREGATE_TARGET。
PGA_AGGREGATE_TARGET的取值范围是10M~(4096G - 1 )bytes。
对于PGA_AGGREGATE_TARGET大小的设置,Oracle提供了一个以下建议方案(参见Metalink Note: 223730.1):
o 对于OLTP系统,PGA_AGGREGATE_TARGET = (物理内存大小 * 80%) * 20%
o 对于DSS系统,PGA_AGGREGATE_TARGET = (物理内存大小 * 80%) * 50%
例如,你的系统是一个OLTP系统,物理内存为8G,那么推荐PGA_AGGREGATE_TARGET设置为 (8 * 80%) * 20% = 1.28G。
除非在共享服务模式下,一般不推荐设置这个参数,而推荐使用PGA_AGGREGATE_TARGET进行PGA内存自动管理。如果需要设置此参数,可以考虑设置在1M~3M。
Oracle也许会为一个查询分配多个排序区。通常情况下,一条语句只有1、2个排序操作,但是对于复杂语句,可能存在多个排序操作,每个排序操作都有自己的排序区。因此,语句的复杂性也影响到每个进程PGA内存的大小。
SORT_AREA_RETAINED_SIZE在共享服务中是从SGA中分配的(因为此时UGA从SGA中分配),在专有服务模式中是从PGA中分配的。而SORT_AREA_SIZE无论在那种模式下都从PGA中分配。
同样,设置了PGA_AGGREGATE_TARGET后,该参数无效。
此外,由于Hash Join只有在优化器为CBO(Cost-Base Optimizer)模式下才有效,因此这个参数也只有CBO模式下才有意义。
由于Hash Join只有在优化器为CBO(Cost-Base Optimizer)模式下才有效,因此这个参数也只有CBO模式下才有意义。
10g中,这个参数是隐含参数。
同样,设置了PGA_AGGREGATE_TARGET后,该参数无效。
同样,设置了PGA_AGGREGATE_TARGET后,该参数无效。
PGA的组成(必须知道的四个部分:stack space,session information,sort area,hash area)
PGA由两组区域组成:固定PGA和可变PGA(或者叫PGA堆,PGA Heap【堆——Heap就是一个受管理的内存区】)。固定PGA和固定SGA类似,它的大小时固定的,包含了大量原子变量、小的数据结构和指向可变PGA的指针。
可变PGA时一个内存堆。它的内存段可以通过视图X$KSMPP(另外一个视图X$KSMSP可以查到可变SGA的内存段信息,他们的结构相同)查到。PGA堆包含用于存放X$表的的内存(依赖与参数设置,包括DB_FILES、CONTROL_FILES)。
总的来说,PGA的可变区中主要分为以下三部分内容:
o 私有SQL区;
o 游标和SQL区
o 会话内存
PGA/UGA一般保存了用户的变量,权限,堆栈,排序空间。hash jion空间等信息。
PGA_AGGREGATE_TARGET
这个参数前面介绍了。它控制了所有进程PGA内存的总的大小。在专有服务模式下,推荐使用PGA_AGGREGATE_TARGET。
PGA_AGGREGATE_TARGET的取值范围是10M~(4096G - 1 )bytes。
对于PGA_AGGREGATE_TARGET大小的设置,Oracle提供了一个以下建议方案(参见Metalink Note: 223730.1):
o 对于OLTP系统,PGA_AGGREGATE_TARGET = (物理内存大小 * 80%) * 20%
o 对于DSS系统,PGA_AGGREGATE_TARGET = (物理内存大小 * 80%) * 50%
例如,你的系统是一个OLTP系统,物理内存为8G,那么推荐PGA_AGGREGATE_TARGET设置为 (8 * 80%) * 20% = 1.28G。
WORKAREA_SIZE_POLICY
参数WORKAREA_SIZE_POLICY决定是否使用PGA_AGGREGATE_TARGET来管理PGA内存。它有两个值:AUTO和MANUAL。默认是AUTO,即使用PGA_AGGREGATE_TARGET来管理PGA内存。9i之前是manual,10g之后是auto。sort_area_size
Oracle在做排序操作(ORDER BY、GROUP BY、ROLLUP、窗口函数)时,需要从工作区中分配一定内存区域对数据记录做内存排序。在排序完成后,数据返回之前,Oracle会释放这部分内存,。SORT_AREA_SIZE指定了这部分内存的大小。设置了PGA_AGGREGATE_TARGET后,该参数无效。除非在共享服务模式下,一般不推荐设置这个参数,而推荐使用PGA_AGGREGATE_TARGET进行PGA内存自动管理。如果需要设置此参数,可以考虑设置在1M~3M。
Oracle也许会为一个查询分配多个排序区。通常情况下,一条语句只有1、2个排序操作,但是对于复杂语句,可能存在多个排序操作,每个排序操作都有自己的排序区。因此,语句的复杂性也影响到每个进程PGA内存的大小。
sort_area_retained_size
这个参数与SORT_AREA_SIZE配合使用。它指定了在排序操作完成后,继续保留用户全局区(User Global Area UGA,关于UGA与PGA、SGA关系在UGA部分介绍)内存的最大大小,以维护内存中的排序,直到所有数据行被返回后才释放(上面提到,SORT_AREA_SIZE的内存在排序完成、数据行返回之前被释放)回UGA(注意:是释放回UGA,而不会被操作系统回收)。SORT_AREA_RETAINED_SIZE在共享服务中是从SGA中分配的(因为此时UGA从SGA中分配),在专有服务模式中是从PGA中分配的。而SORT_AREA_SIZE无论在那种模式下都从PGA中分配。
同样,设置了PGA_AGGREGATE_TARGET后,该参数无效。
hash_area_size
HASH_AREA_SIZE设置了在做Hash Join时,hash内存表可占用的内存空间。同样,设置了PGA_AGGREGATE_TARGET后,该参数无效。它的默认值大小是sort_area_size的1.5倍。此外,由于Hash Join只有在优化器为CBO(Cost-Base Optimizer)模式下才有效,因此这个参数也只有CBO模式下才有意义。
hash_join_enable
这个参数决定是否启用Hash Join。默认为TRUE。由于Hash Join只有在优化器为CBO(Cost-Base Optimizer)模式下才有效,因此这个参数也只有CBO模式下才有意义。
10g中,这个参数是隐含参数。
bitmap_merge_area_size
在使用位图索引(Bitmap Index)时,oracle为索引位图段建立一张位图。在进行位图索引扫描时,需要将扫描到的位图索引排序后与位图合并(Merge),Oracle会在PGA中开辟一片区域用于排序和合并。参数BITMAP_MERGE_AREA_SIZE指定了这篇区域的大小。默认值是1M。同样,设置了PGA_AGGREGATE_TARGET后,该参数无效。
create_bitmap_area_size
在字段的集的势(Cardinality 参照记录行数,字段的不同值的一个因子。记录数越多,不同值越少,则集的势越小)很小,并且表的数据变化不大时,可以考虑为字段建立位图索引以提高对该字段的检索效率。这个参数指定可在创建位图索引时的内存空间占用大小。它的默认大小是8M。同样,设置了PGA_AGGREGATE_TARGET后,该参数无效。
open_cursors
这个参数设置一个会话可以同时打开的游标数。由于每打开一个游标,都需要一部分PGA内存分配出来作为私有SQL区。因此这个参数也影响了每个进程的PGA内存的占用大小。_pga_max_size
这是一个隐含参数。它规定了一个PGA的最大大小。相关文章推荐
- Configuring Automatic PGA Memory--自动程序全局区管理
- ORACLE 过时技术之(三)--PGA手动管理
- Objective C----手动管理内存和自动管理内存
- PGA自动管理原理深入分析及性能调整
- 大多数情况下使用ARC内存自动管理机制,特殊情况采用MRC手动管理
- Oracle - PGA自动管理原理深入分析及性能调整(6)
- PGA自动管理原理深入分析及性能调整-转
- Oracle - PGA自动管理原理深入分析及性能调整(7)
- Oracle 自动内存管理 SGA、PGA 详解
- Oracle - PGA自动管理原理深入分析及性能调整(4)
- Oracle - PGA自动管理原理深入分析及性能调整(5)
- PGA自动管理原理深入分析
- PGA_AGGREGATE_TARGET --- PGA自动管理原理深入分析及性能调整
- Objective C----手动管理内存和自动管理内存
- PGA 内存自动管理
- Oracle - PGA自动管理原理深入分析及性能调整(3)
- Oracle PGA自动管理在OLAP系统中的应用
- PGA自动管理原理深入分析及性能调整
- PGA自动管理原理深入分析及性能调整
- Oracle - PGA自动管理原理深入分析及性能调整(2)