Oracle SGA 성능평가 및 최적화

※ sqlplus / as sysdba 에서 실행한다.

■ DATA DICTIONARY 성능 평가

SELECT  sum(gets) "gets",
 sum(getmisses) "getmisses" ,
 round( (1-(sum(getmisses)/sum(gets)) )*100,2) "Hit Ratio"
FROM  gv$rowcache
WHERE gets > 0 ;

☞ 이 값은 Hit Ratio가 95% 이상이면 정상이다. 만약 수치가 높으면 shared_pool_size의 값을 증가 시켜야 한다.


■ LIBRARY CACHE 성능 평가

select to_char(trunc(sum(reloads)/sum(pins)*100, 5),99.99999)||'% (less than 1%)' "Library Cache MISS RATIO" from v$librarycache;

☞ 이 값은 1~2% 이하이면 정상이다. 만약 수치가 높으면 shared_pool_size의 값을 증가 시켜야 한다.


■ 버퍼 캐시 성능 평가

SELECT  bg.value "DB Block Gets",
 cg.value "Consistent Gets",
 pr.value "Physical Reads",
 round((1-(pr.value/(bg.value+cg.value)))*100, 2) "Hit Ratio"
FROM  v$sysstat pr,
 v$sysstat bg,
 v$sysstat cg
WHERE  pr.name = 'physical reads'
 AND  bg.name = 'db block gets'
 AND  cg.name = 'consistent gets';

☞ 이 값은 Hit Ratio가 90% 이상 나와야 정상이며, 70% 이하로 떨어져 있을 경우
   db_block_buffers 또는 db_cache_size를 증가시켜야 한다.


■ 소트 성능 평가

select name, value from v$sysstat where name in ('sorts (memory)', 'sorts (disk)');

☞ 메모리와 디스크 양쪽에서 소트에 얼마나 많은 자원을 할당하는지 알아본다.
   만약 메모리 소트보다 디스크 소트가 많으면 sort_area_retained_size의
   크기를 늘려주어야 한다.


■ 리두 로그 버퍼 성능 평가

SELECT value "Redo log request" FROM  v$sysstat WHERE name = 'redo log space requests';

☞ 결과값이 0에 가까워질 때까지 리두로그 버퍼 수를 늘려야 한다.


■ ROLLBACK SEGMENT 성능 평가

column 'rollback segment name' format a25
column miss_ratio format a10
column rssize format 99,999,999
column writes format 99,999,999
column xacts format 999
column status format a8

select name "rollback segment name",
       rssize, writes, xacts, status,
       trunc(waits/gets*100, 5)||' %' miss_ratio
from v$rollstat, v$rollname
where v$rollstat.usn = v$rollname.usn
order by waits/gets desc;

☞ MISS RATIO가 1~2% 이하 이어야 한다.
   1~2%보다 크면 ROLLBACK SEGMENT의 갯수를 늘려주어야 한다.



SHOW PARAMETERS
SHOW PARAMETER process
SHOW PARAMETER spfile

Default: 300
ALTER SYSTEM SET OPEN_CURSORS=300 SCOPE=SPFILE;

Default: 150
ALTER SYSTEM SET PROCESSES=150 SCOPE=SPFILE;

Default: 0
ALTER SYSTEM SET SHARED_POOL_SIZE=200M SCOPE=SPFILE;

Default: 0
ALTER SYSTEM SET LARGE_POOL_SIZE=200M SCOPE=SPFILE;

Default: 0
ALTER SYSTEM SET DB_BLOCK_SIZE=8192 SCOPE=SPFILE;

Default: 0
ALTER SYSTEM SET DB_CACHE_SIZE=200M SCOPE=SPFILE;

Default: 0
ALTER SYSTEM SET SORT_AREA_RETAINED_SIZE=0 SCOPE=SPFILE;

Default: 1G
ALTER SYSTEM SET MEMORY_TARGET=1G SCOPE=SPFILE;

ALTER SYSTEM SET JAVA_POOL_SIZE=0 SCOPE=SPFILE;
ALTER SYSTEM SET STREAMS_POOL_SIZE=0 SCOPE=SPFILE;

SELECT (
   (SELECT SUM(value) FROM V$SGA) -
   (SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)
   ) "SGA_TARGET"
FROM DUAL;
ALTER SYSTEM SET SGA_TARGET=512M SCOPE=SPFILE;

ALTER SYSTEM SET SGA_MAX_SIZE=1024M SCOPE=SPFILE;
ALTER SYSTEM SET LARGE_POOL_SIZE=256M SCOPE=SPFILE;

위로 스크롤