注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一路奔跑

奔跑着一路向前...

 
 
 

日志

 
 

oracle实例内存(SGA和PGA)调整 续2  

2012-10-10 15:38:38|  分类: Oracle书架 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

如何估算PGASGA的大小,配置数据库服务器的内存

ORACLE给的建议是: OLTP系统  PGA=(Total Memory)*80%*20%

DSS系统PGA=(Total Memory)*80%*50%

ORACLE建议一个数据库服务器,分80%的内存给数据库,20%的内存给操作系统,那怎么给一个数据库服务器配内存呢?

SQL> select * from v$pgastat;

NAME                                                                  VALUE UNIT

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

aggregate PGA target parameter                                    104857600 bytes 

-----这个值等于参数PGA_AGGREGATE_TARGET的值,如果此值为0,表示禁用了PGA自动管理。

aggregate PGA auto target                                          75220992 bytes     

-----表示PGA还能提供多少内存给自动运行模式,通常这个值接近pga_aggregate_target-total pga inuse.

global memory bound                                                20971520 bytes

-----工作区执行的最大值,如果这个值小于1M,马上增加PGA大小

total PGA inuse                                                    30167040 bytes

-----当前分配PGA的总大小,这个值有可能大于PGA,如果PGA设置太小.这个值接近select sum(pga_used_mem) from v$process.

total PGA allocated                                                52124672 bytes

-----工作区花费的总大小

maximum PGA allocated                                              67066880 bytes

total freeable PGA memory                                                 0 bytes         ----没有了空闲的PGA

process count                                                            23                    ----当前一个有23process

max processes count                                                      25

PGA memory freed back to OS                                               0 bytes

total PGA used for auto workareas                                   8891392 bytes

maximum PGA used for auto workareas                                22263808 bytes

total PGA used for manual workareas                                       0 bytes                  ---0自动管理

maximum PGA used for manual workareas                                     0 bytes            ---0自动管理

over allocation count                                                     0       

--如果PGA设置太小,导致PGA有时大于PGA_AGGREGATE_TARGET的值,此处为0,说明PGA没有扩展大于TARGET的值,如 果此值出现过,那么增加PGA大小。

bytes processed                                                   124434432 bytes

extra bytes read/written                                                  0 bytes

cache hit percentage                                                    100 percent 

---命中率为100%,如果太小增加PGA

recompute count (total)                                                6651

19 rows selected

SQL> select max(pga_used_mem)/1024/1024 M from v$process;  

----当前一个process消耗最大的内存

M

----------

9.12815189

SQL> select min(pga_used_mem)/1024/1024 M from v$process where pga_used_mem>0; ---process消耗最少内存

M

----------

0.19186878

SQL> select max(pga_used_mem)/1024/1024 M from v$process ;   

----process曾经消耗的最大内存

M

----------

9.12815189

SQL> select sum(pga_used_mem)/1024/1024 from v$process;   ----当前process一共消耗的PGA

SUM(PGA_USED_MEM)/1024/1024

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

28.8192501068115

如何设置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需要设置多大。

 

EG = 1.1 * 450 = 495M  估算的大一点 550MOK

 

最好将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.

如果1000m<pga_aggregate_target<=2.5G,那么最大内存为 10%*pga_aggregate_target.

如果pga_aggregate_target>2.5G,那么最大内存为2.5G.

SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ

FROM SYS.x$ksppi x, SYS.x$ksppcv y WHERE x.inst_id = USERENV ('Instance')

AND y.inst_id = USERENV ('Instance') AND x.indx = y.indx AND x.ksppinm LIKE '%&par%'

 

 

NAME                                                                             VALUE                                                                            DESCRIB

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

_smm_max_size                                                                    20480                                                                            maximum work area size in auto mode (serial)

SQL> show parameter pga

NAME                                 TYPE        VALUE

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

pga_aggregate_target                 big integer 100M

此处我的一个process能够分配的最大内存为20M,因为我的PGA=100M,符合上面的规则。

含参数_smm_max_size表示一个process能够分配最大的memory.

 

 

 

买了piner的《oracle高可用环境》一书,正好趁这段时间学习一下。

把看到的东西总结一下发表于此,今天先发第一章关 SGAPGA的内容。

 

以后会陆续将总结在此发表,与大家共享。

 

SGAPGA的结构如下图:

oracle实例内存(SGA和PGA)调整 续2 - 誠者無敌 - 一路奔跑

 

  评论这张
 
阅读(114)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018