您的位置:首页 > 数据库 > Oracle

Oracle PGA内存的配置和使用

2012-05-29 08:23 274 查看
--预备知识

PGA(Process Global Area),是server process一段私有内存区,它包含有全局变量,数据结构和一些控制信息。在Oracle8i 中,PGA调整非常复杂,要调整SORT_AREA_SIZE、HASH_AREA_SIZE、BITMAP_MERGE_AREA_SIZE、 CREATE_BITMAP_AREA_SIZE等参数。在ORACLE9I中,只需要调整 PGA_AGGREGATE_TARGET。



--PGA_AGGREGATE_TARGET初始化设置


PGA_AGGREGATE_TARGET 的值应该基于Oracle实例可利用内存的总量来设置,这个参数可以被动态的修改。假设Oracle实例可分配4GB的物理内存,剩下的内存分配给操作系统和其它应用程序。你也许会分配80%的可用内存给Oracle实例,即3.2G。现在必须在内存中划分SGA和PGA区域。

在OLTP系统中,典型PGA内存设置应该是总内存的较小部分(例如20%),剩下80%分配给SGA。

OLTP:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 20%

在DSS系统中,由于会运行一些很大的查询,典型的PGA内存最多分配70%的内存。

DSS:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 50%

在这个例子中,总内存4GB,DSS系统,你可以设置PGA_AGGREGATE_TARGET为1600MB,OLTP则为655MB。

--配置PGA自动管理

不用重启DB,直接在线修改。

SQL> alter system set workarea_size_policy=auto scope=both;

System altered.

SQL> alter system set pga_aggregate_target=512m scope=both;

System altered.

SQL> show parameter workarea

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

workarea_size_policy string AUTO --这个设置成AUTO

SQL> show parameter pga

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

pga_aggregate_target big integer 536870912

SQL>

--监控自动PGA内存管理的性能

V$PGASTAT:这个视图给出了一个实例级别的PGA内存使用和自动分配的统计。

SQL> set lines 256

SQL> set pages 42

SQL> SELECT * FROM V$PGASTAT;

NAME VALUE UNIT

---------------------------------------------------------------- ---------- ------------

aggregate PGA target parameter 536870912 bytes --当前PGA_AGGREGATE_TARGET的值

aggregate PGA auto target 477379584 bytes --当前可用于自动分配了的PGA大小,不应该比PGA_AGGREGATE_TARGET 小

global memory bound 26843136 bytes --自动模式下工作区域的最大大小,Oracle根据工作负载自动调整。

total PGA inuse 6448128 bytes

total PGA allocated 11598848 bytes --PGA的最大分配

maximum PGA allocated 166175744 bytes

total freeable PGA memory 393216 bytes --PGA的最大空闲大小

PGA memory freed back to OS 69074944 bytes

total PGA used for auto workareas 0 bytes --PGA分配给auto workareas的大小

maximum PGA used for auto workareas 1049600 bytes

total PGA used for manual workareas 0 bytes

maximum PGA used for manual workareas 530432 bytes

over allocation count 1118 --实例启动后,发生的分配次数,如果这个值大于0,就要考虑增加pga的值

bytes processed 114895872 bytes

extra bytes read/written 4608000 bytes

cache hit percentage 96.14 percent --命中率

16 rows selected.



--V$PGA_TARGET_ADVICE


SQL> SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb,

ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,

ESTD_OVERALLOC_COUNT

FROM v$pga_target_advice;

The output of this query might look like the following:

TARGET_MB CACHE_HIT_PERC ESTD_OVERALLOC_COUNT

---------- -------------- --------------------

63 23 367

125 24 30

250 30 3

375 39 0

500 58 0

600 59 0

700 59 0

800 60 0

900 60 0

1000 61 0

1500 67 0

2000 76 0

3000 83 0

4000 85 0

可以看出当TARGET_MB 为375M是ESTD_OVERALLOC_COUNT=0,所以我们可以将PGA_AGGREGATE_TARGET设置成375M。

From:http://hi.baidu.com/edeed/item/7aed6ee4b3f0870f8d3ea885
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: