入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

oracle 内存使用情况

创建时间:2013-04-18 投稿人: 浏览次数:154


SGA使用情况

v$sga_current_resize_ops

v$sga_dynamic_components
v$sga_dynamic_free_memory
v$sga_resize_ops
v$sga_target_advice
v$sgainfo

v$sgastat


PGA使用情况

v$pgastat; 


v$pgastat 记录分析

aggregate PGA target parameter104857600 bytes

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

aggregate PGAauto target 75220992 bytes

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

globalmemorybound20971520 bytes

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

total PGA inuse30167040 bytes

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

total PGA allocated52124672 bytes

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

maximum PGA allocated67066880 bytes

total freeable PGAmemory0 bytes ----没有了空闲的PGA

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

max processes count25

PGAmemory freed back to OS 0 bytes

total PGA usedforauto workareas 8891392 bytes

maximum PGA usedforauto workareas 22263808 bytes

total PGA usedformanual workareas 0 bytes ---0自动管理

maximum PGA usedformanual workareas 0 bytes ---0自动管理

over allocation count0

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

bytes processed124434432 bytes

extra bytesread/written0 bytes

cache hit percentage 100percent

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


PGA建议值

SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb,ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc, ESTD_OVERALLOC_COUNT  FROM v$pga_target_advice;


SGA建议值

select * from  v$sga_target_advice;


附:oracle SGAPGA区别:

SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。

PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA正相反,PGA是只被一个进程使用的区域,PGA在创建进程时分配,在终止进程时回收。


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

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


----当前process一共消耗的PGA

select sum(pga_used_mem)/1024/1024from v$process;


如何设置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的大小,建议还是多配点内存。



关于一个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.ksppinmNAME, y.ksppstvlVALUE, x.ksppdesc describ

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

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。