ITPub博客

首页 > Linux操作系统 > Linux操作系统 > PGA 内存的管理 (zt)

PGA 内存的管理 (zt)

原创 Linux操作系统 作者:tolywang 时间:2007-10-29 00:00:00 0 删除 编辑

一、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/35489/viewspace-84975/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13096988