9i 之前通过设置 *_AREA_SIZE 参数来指定 PGA 中各个区域的大小(注意是会话级大小)。
9i 及之后通过 workarea_size_policy = AUTO 和 pga_aggregate_target 进行自动管理。
注意: P_A_T 只是一个目标值,并不是绝对限制。
设置 PGA 值的方法
方法一:
经验值:
OLTP:物理内存*80%*20%
OLAP:物理内存*80%*50%
方法二:
v$pga_target_advice
ESTD_OVERALLOC_COUNT 至少应该是0,另外结合 ESTD_TIME 和 ESTD_PGA_CACHE_HIT_PERCENTAGE 来决定。
评估PGA设置是否合理的方法
1.查看 AWR 报告中的 PGA Cache Hit%
2.分析 direct path read temp 和 direct path write temp 是否较高
3.观察 v$pgastat 中的 'over allocation count' 的值,理想值是0,否则表示 Oracle 实际分配的 PGA 大小已经超过了 P_A_T 参数指定的值。当出现此种情况时,Oracle 认为每个 Server Process 进程可能需要更多的 PGA 区域,于是 PGA 算法就为每个进程分配更多的资源,会加快内存溢出的速度。