PGA内存管理

一、PGA的概念
   服务进程启动的时候,被创建的非共有的内存领域。只能被创建的进程所访问。
  专用模式:一个Session一个服务进程
  共有模式:多个Session一个服务进程,服务进程与Dispatcher无关。


二、PGA包含的内容
PRIVATE SQL領域:SQL的作业空间,用于保存变量信息,结果信息,中间结果。
SESSION Memory:用于保存于SESSION相关的一些信息。如SESSION级别的参数,变量。
PRIVATE SQL領域里,包含用于进行以下处理的空间
    排序
    Hash结合
    Bitmap Merge
    Bitmap 做成


三、PGA内存调整以后有什么好处
排序,Hash结合等处理也在PGA中进行,如果PGA的内存不够的话,就会的任务进行拆分
然后把不能放到内存的部分放到磁盘上去,这样的话就会处理速度大大的降低。而这种
时候适当的调整PGA的大小,可能大大提高系统的性能。


四、PGA内存所需大小的估算方法
按照下面的优先顺序。
1、如果是系统的更新,可以根据原有系统的性能。例如,想在原有系统上性能提高50%
    那么,内存也在原有系统上增加50%。
2、参照类似的系统。如果在使用环境,用户数量,内容上,性能上都差不多的系统。也可以参考
3、按照以下公司大概估算
    同时使用系统的用户数  × 10M
4、PGA和SGA的总量可以按照以下公式
A: 更新处理需要的内存       
        commit数/秒 × 每一个事务的数据量 × 缓冲的保存时间
B: 检索结果需要的内存       
        检索事务数/秒×每一件的数据量 × 同时使用的用户数
C:总的内存  A + B       

五、PGA现在使用大小的确认方法
PGA的使用情况通过对一下几个动态性能表的查询进行管理
V$PROCESS、
1、V$PROCESS能够查看每一个进程(包括系统的后台进程)分配到的,使用的,可以Free的内存
PGA_USED_MEM           现在使用的
PGA_ALLOC_MEM         分配到的(包含未释放到OS的)
PGA_FREEABLE_MEM     可以释放的
PGA_MAX_MEM             曾经分配的最大内存
USERNAME                  操作系统进程的用户,不是客户SESSION的用户

2、V$PROCESS_MEMORY 每一个进程中,SQL,PL/SQL,OTHER等每一个部分分配到的内存
ALLOCATED
USED
MAX_ALLOCATED

3、v$bgprocess 后台进程的信息。paddr有值得进程才处于激活状态

4、v$session    SESSION的信息,专用模式是通过paddr可以找到process

5、v$shared_server v$dispatcher

系统使用中的PGA总数(M)

select trunc(sum( pga_alloc_mem )/(1024*1024),2) from v$process

六、PGA关联的参数设定
从9i开始,PGA的大小可以由数据库自动管理,不用再手工的去设定*_AREA_SIZE参数。
一、自动管理
  pga_aggregate_target 不是PGA的最大内存,PGA使用的内存有可能超过这个大小,它是sort , hash join 等使用的作业区的大小
  workarea_size_policy    AUTO 使用自动管理  MANUAL 手工管理

下面的SQL验证了PGA的总内存数量可以超过 pga_aggregate_target 所设定的数量
SQL> show parameter pga_aggre
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------
pga_aggregate_target                 big integer 91M
SQL> select trunc(sum( pga_alloc_mem )/(1024*1024),2) from v$process;
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
                                  50.14
SQL> alter system set pga_aggregate_target= 50M scope=BOTH ;
SQL> show parameter pga_a
NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------
pga_aggregate_target                 big integer 50M
SQL> show parameter work_area_
SQL> show parameter work
NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------
fileio_network_adapters              string
workarea_size_policy                 string      AUTO
SQL> select trunc(sum( pga_alloc_mem )/(1024*1024),2) from v$process;
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
                                  43.61
SQL> /
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
                                  45.99
SQL> /
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
                                  46.83
SQL> /
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
                                  48.14
SQL> /
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
                                 48.14
SQL> /
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
                                  49.33

TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
                                  50.52
SQL> /
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
                                  51.11



七、PGA大小的调整

在检查PGA的问题是,下面的几个性能表将会非常有用
v$pgastat

aggregate PGA target parameter   初始化参数pga_aggregate_target的值
aggregate PGA auto target         可以实际使用的PGA内存,太小时需要调整
global memory bound                  能够使用的SQL作业区域的最大值
                                             与_smm_max_size 和_smm_min_size 有关
total PGA used for auto workareas 使用中的SQL作业区的大小。SQL执行完成,变为0

PGA大小调整的关键是SQL作业区的使用方式
    optimal   : 所有的处理都在内存中执行
    onepass   : 有一部分处理不在内存中
    multipass : 很多的处理不在内存中
性能优化的目标
      optimal 的PERCENTAGE >= 90%
      multipass 的 PERCENTAGE = 0%
用下面的SQL来检查每个部分的百分比
     SELECT name profile,
            cnt,
            decode( total, 0, 0, round( cnt * 100 / total)) percentage
     FROM ( SELECT name, value cnt, ( SUM( value ) OVER())  total
            FROM v$sysstat
            WHERE name LIKE 'workarea exec%');

     PROFILE                                                   CNT PERCENTAGE
     -------------------------------------------------- ----------
     workarea executions - optimal                            5395         95
     workarea executions - onepass                             284          5
     workarea executions - multipass                             0          0



八、PGA每一个服务进程 serer process的内存分配
每一个server process能够分配到的内存(不包括session等,主要是SQL的作业区域)的最大值和最小值由下面的隐藏参数控制,下面使default值的设定
_smm_min_size: max(pga_aggregate_target 的 0.1%(1MB 以内), 128KB)
_smm_max_size: min(pga_aggregate_target 的 5%, _pga_max_size/2)
注意:并不是server process一创建,这些内存就会被使用,内存只有再必须的时候才会被分配。这个的最大,最小不是对一个server process说的,而是对于一个,operation type ,例如
sort , hash join . 所以,一个server process 有可能可以分配到两个。当_smm_max_size也不能完成处理的时候,系统可能会自动暂时的扩张pga_aggrate_target的大小,
-----------------------------------------------------------------
隐藏参数的确认方法:
  用SYS用户执行以下SQL
  select a.ksppinm "Parameter",a.KSPPDESC "Description",b.ksppstvl "Value"
  from x$ksppi a, x$ksppcv b where a.indx = b.indx and a.ksppinm like '%_smm_min_size%';

隐藏参数的修改方法:
SQL> create pfile='d:\huddy.ora' from spfile ;
SQL> shutdown immediate ;
SQL> create spfile from pfile='d:\huddy.ora';
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified

SQL> select a.ksppinm "Parameter",a.KSPPDESC "Description",b.ksppstvl "Value"
  2    from x$ksppi a, x$ksppcv b where a.indx = b.indx and a.ksppinm like '%_smm_min_size%';

_smm_min_size
minimum work area size in auto mode
8096
-----------------------------------------------------------------

当pga_aggrate_target的内存用完的时候,系统并不会因此而不让新的server process产生
而是会自动的去取得超过pga_aggrate_target的内存来用。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23190213/viewspace-660694/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23190213/viewspace-660694/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值