| |
SQL> select event,count(*) from v$session_wait
2 group by event order by count(*);
EVENT COUNT(*)
---------------------------------------------------------------- ----------
SQL*Net message to client 1
async disk IO 1
buffer busy global CR 1
buffer busy waits 1
ges remote message 1
pmon timer 1
wakeup time manager 1
smon timer 1
db file sequential read 2
gcs remote message 2
rdbms ipc message 10
EVENT COUNT(*)
---------------------------------------------------------------- ----------
SQL*Net message from client 591
12 rows selected.
select sid,event,p1,p2,p3,seconds_in_wait from v$session_wait
where event not like '%SQL*Net%'
and event not like '%timer%'
and event not like '%message%'
order by event;
** 과도한 logical read를 수행하는 SQL문을 V$SQLAREA 에서 검색해줌.
**
** 원인 => 1) 인덱스 컬럼에 distinct한 값이 적은, 부적절한 인덱스의 사용. (대체로 인덱스를 지워야 할 경우)
** 2) 최적화 되지 않은 SQL 문장
*/
select buffer_gets, sql_text from v$sqlarea
where buffer_gets > 200000
order by buffer_gets desc;
과도한 disk read를 하는 SQL문을 찾아주는 스크립트
select disk_reads, sql_text from v$sqlarea
where disk_reads > 10000
order by disk_reads desc;
SGA의 shared pool 의 현재 사용도를 출력해주는 SQL
/*
** shared_pool_size의 현재 사용 현황을 보여줌. <박제용>
**
** shared_pool_size의 현재의 사용현황을 보여준다.
** 이 데이터를 주기적으로 보관하여 분석한다.
*/
col value for 999,999,999,999 heading "Shared Pool Size"
col bytes for 999,999,999,999 heading "Free Bytes"
select to_number(v$parameter.value) value, v$sgastat.bytes,
(v$sgastat.bytes/v$parameter.value)*100 "Percent Free"
from v$sgastat, v$parameter
where v$sgastat.name = 'free memory'
and v$ parameter .name = ‘shared_pool_size;
|