概述
ORACLE给的建议是: OLTP系统 PGA=(Total Memory)*80%*20%。DSS系统PGA=(Total Memory)*80%*50%。
ORACLE建议一个数据库服务器,分80%的内存给数据库,20%的内存给操作系统,那怎么给一个数据库服务器配内存呢?
SQL> select * from v$pgastat;
NAME VALUE UNIT -----这个值等于参数PGA_AGGREGATE_TARGET的值,如果此值为0,表示禁用了PGA自动管理。 -----表示PGA还能提供多少内存给自动运行模式,通常这个值接近pga_aggregate_target-total pga inuse. -----工作区执行的最大值,如果这个值小于1M,马上增加PGA大小 -----当前分配PGA的总大小,这个值有可能大于PGA,如果PGA设置太小.这个值接近select sum(pga_used_mem) from v$process. -----工作区花费的总大小 如果PGA设置太小,导致PGA有时大于PGA_AGGREGATE_TARGET的值,此处为0,说明PGA没有扩展大于TARGET的值,如果此值出现过,那么增加PGA大小。 recompute count (total) 6651 19 rows selected SQL> select max(pga_used_mem)/1024/1024 M from v$process; ----当前一个process消耗最大的内存 M SQL> select min(pga_used_mem)/1024/1024 M from v$process where pga_used_mem>0; ---process消耗最少内存 M SQL> select max(pga_used_mem)/1024/1024 M from v$process ; ----process曾经消耗的最大内存 M SQL> select sum(pga_used_mem)/1024/1024 from v$process; ----当前process一共消耗的PGA SUM(PGA_USED_MEM)/1024/1024 如何设置PGA呢?我们可以在压力测试阶段,模拟一下系统的运行,然后运行 select (select sum(pga_used_mem)/1024/1024 from v$process) /(select count(*) from v$process) from dual;得到一个process大约占用了多少的内存,然后估算系统一共会有多少连接,比如一共有500个连接, 那么Sessions=1.1*process +5=500,那么processes=450,再乘以一个process需要消耗的内存,就能大约估算出PGA需要设置多大。 最好将PGA设置的值比计算出的值大一点,PGA值设定好后,就可以根据系统的性质,如果系统为OLTOP,那么总的内存可以设置为PGA/0.16,最后也能估算出SGA的大小,建议还是多配点内存,反正便宜。 下面摘抄eygle的关于一个process能够分配的最大内存(串行操作)的规则: 10gR1之前,对于串行操作(非并行)一个process能够分配的最大的内存为min(5%pga_aggregate_target,100m) 10gR2之后,对于串行操作(非并行)一个process能够分配的最大内存有如下规则: 如果pga_aggregate_target<=500m,那么最大的内存为20%*pga_aggregate_target. 如果500m<pga_aggregate_target<=1000m,那么最大内存为100m. 以上就是专一枫叶为你收集整理的PGA的设定的全部内容,希望文章能够帮你解决PGA的设定所遇到的程序开发问题。 如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
aggregate PGA auto target 75220992 bytes
over allocation count 0
买了piner的《oracle高可用环境》一书,正好趁这段时间学习一下。
最后
发表评论 取消回复