天天看點

oracle 記憶體使用情況

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----目前一個有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 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);

繼續閱讀