#!/usr/bin/ksh #--------------------------------------------------------------------------------- # Shared Memory Usage Report # Author : # Date : 27-Jul-2000 # 02-Jun-2006 Added overview reserved pool from Ixora # 07-Jun-2006 Added free list in reserved pool from Ixora # 20-Jun-2006 Added all advices # added pga stats # updated option -s to add link toward v$sga_dynamic_component # 22-Jun-2006 added lru option over x$ksmlru #--------------------------------------------------------------------------------- HOST=`hostname` HOST=`echo $HOST | awk '{ printf ("%-+15.15s",$1) }'` ACTION=SGA function help { cat <> Limit to last ops resize sga -lru # Show least recently used shared pool chunks flushed from shared pool sga -his # show sga history sga -inf # sga info from v\$sgainfo Additional options : -h # this help EOF exit } ROWNUM=30 while [ -n "$1" ] do case "$1" in -r ) ACTION=RESERVED ;; -res ) ACTION=RESIZE_800 ;; -o ) ACTION=OVERVIEW; S_USER=SYS ;; -s ) ACTION=SUMMARY; S_USER=SYS ;; -inf ) ACTION=INF;; -f ) ACTION=SHP; S_USER=SYS ;; -l ) ACTION=FREE_LIST; S_USER=SYS ;; -p ) ACTION=PGA; S_USER=SYS ;; -ab ) ACTION=ADVB; S_USER=SYS ;; -as ) ACTION=ADVS; S_USER=SYS ;; -ap ) ACTION=ADVP; S_USER=SYS ;; -k ) ACTION=FREE_CHUNKS; S_USER=SYS ;; -ko ) ACTION=FREE_CHUNKS_SUMMARY; S_USER=SYS ;; -rn ) ROWNUM=$2; shift ;; -lru ) ACTION=LRU; S_USER=SYS;; -his ) ACTION=SGA_HIS;; -h ) help ;; esac shift done S_USER=SYS . $SBIN/scripts/passwd.env . ${GET_PASSWD} if [ "x-$CONNECT_STRING" = "x-" ];then echo "could no get a the password of $S_USER" exit 0 fi if [ "$ACTION" = "INF" ];then sqlplus -s "$CONNECT_STRING" < 0 group by ksmdsidx ) a, (select ksmchidx,sum(ksmchsiz)/1048576 bytes from x\$ksmsp where KSMCHCOM = 'free memory' group by ksmchidx ) b where a.ksmdsidx=b.ksmchidx / select KSMCHIDX "SubPool", 'sga heap('||KSMCHIDX||',0)'sga_heap,ksmchcom ChunkComment, decode(round(ksmchsiz/1000),0,'0-1K', 1,'1-2K', 2,'2-3K',3,'3-4K', 4,'4-5K',5,'5-6k',6,'6-7k',7,'7-8k',8, '8-9k', 9,'9-10k','> 10K') "size", count(*),ksmchcls Status, sum(ksmchsiz) Bytes from x\$ksmsp where KSMCHCOM = 'free memory' group by ksmchidx, ksmchcls, 'sga heap('||KSMCHIDX||',0)',ksmchcom, ksmchcls,decode(round(ksmchsiz/1000),0,'0-1K', 1,'1-2K', 2,'2-3K', 3,'3-4K',4,'4-5K',5,'5-6k',6, '6-7k',7,'7-8k',8,'8-9k', 9,'9-10k','> 10K') order by 4; EOF elif [ "$ACTION" = "LRU" ];then # We need to spool this action SPOOL=$SBIN/tmp/KMSLRU_${ORACLE_SID}_`date +%m%d%H%M%S`.log sqlplus -s "$CONNECT_STRING" < 100 then your PGA target is or was too small prompt select var3, var1 n1, to_char(round((var1/var3)*100,1))||'%' perc, var2 n2, to_char(round(var2/var3*100,1))||'%' perc from ( select name n1,round(value/1024/1024,1) var1 from v\$pgastat where name in ('total PGA allocated')) a, (select name n2,round(value/1024/1024,1) var2 from v\$pgastat where name in ('maximum PGA allocated')) b, (select name n3 ,round(value/1024/1024,1) var3 from v\$pgastat where name in ('aggregate PGA target parameter')) c ; prompt EOF elif [ "$ACTION" = "RESIZE_800" ];then sqlplus -s "$CONNECT_STRING" <= 4108 and KSMCHCLS='free' group by KSMCHCLS, KSMCHIDX, 1000*trunc(KSMCHSIZ/1000); EOF elif [ "$ACTION" = "SHP" ];then sqlplus -s "$CONNECT_STRING" < 1 group by ksmssnam), ( select fa-fb hidden_mem from (select sum(ksmsslen)/1048576 fa from x\$ksmss where ksmssnam='free memory' and ksmsslen > 1 group by ksmssnam), (select sum(ksmchsiz)/1048576 fb from sys.x\$ksmsp where ksmchcom = 'free memory' and inst_id = userenv('Instance') and ksmchcls not like 'R%' group by ksmchcom) ), --(select sum(value)/1048576 pga from v\$sesstat s, v\$statname n where n.STATISTIC# = s.STATISTIC# and name = 'session pga memory'), -- (select sum(value/1048576) sess_pga from v\$sesstat s, v\$statname n where n.STATISTIC# = s.STATISTIC# and n.name = 'session pga memory') sess_sga, (select round(value/1024/1024,1) pga from v\$pgastat where name in ('total PGA allocated')), (select sum(bytes)/1048576 sga from v\$sgastat) , (select sum(bytes)/1048576 totused from ( select bytes from v\$sgastat union all select value from v\$pgastat where name in ('total PGA allocated') -- union all -- select value from v\$sesstat s, v\$statname n where n.STATISTIC# = s.STATISTIC# and n.name = 'session pga memory' ) ) )where rownum =1 / prompt prompt prompt SHARED_POOL: prompt ============ Prompt Inadequate size : if request failure > 0 and last_failure_size < min reserved alloc prompt ................ prompt Prompt fragmented : if request failure > 0 and last_failure_size > min reserved alloc prompt ................ Consider increasing 'shared_pool_reserved_size' prompt select * from ( select REQUEST_FAILURES, last_failure_size, exec, reload from ( select REQUEST_FAILURES, last_failure_size, (select val.KSPPSTVL min_alloc from x\$ksppi nam, x\$ksppsv val where nam.indx = val.indx and nam.ksppinm = '_shared_pool_reserved_min_alloc') min_alloc from V\$SHARED_POOL_RESERVED) a, ( SELECT SUM(PINS) "EXEC", SUM(RELOADS) reload FROM V\$LIBRARYCACHE ) b ) where rownum = 1 / EOF elif [ "$ACTION" = "RESERVED" ];then sqlplus -s "$CONNECT_STRING" <