SGA使用情况
v$sga_current_resize_ops
v$sga_dynamic_componentsv$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----当前一个有23个process
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 SGA与PGA区别:
SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA正相反,PGA是只被一个进程使用的区域,PGA在创建进程时分配,在终止进程时回收。
----当前一个process消耗最大的内存
select max(pga_used_mem)/1024/1024M from 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估算的大一点550M就OK乐
最好将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')
AND y.inst_id=USERENV('Instance')AND x.indx= y.indxAND x.ksppinmLIKE'%&par%'
V$bh、x$bh记录了数据块在databuffer中缓冲的情况,通过这个视图可以找系统中的热点块。
通过下面语句找系统中top10热点快所在的热点对象:
Select /*+ rule*/ owner,object_name from dba_objects Where data_object_id in (select obj from (select obj from x$bh order by tch desc) t Where rownum<11);