shared pool과 library cache 래치에 대한 경합은 대부분 과다한 하드 파싱(hard parsing)에 의해
발생된다. 하드 파스(hard parse)는 새로운 커서를 수행하거나 라이브러리 캐시에서 밀려난(age out) 커서들을 재수행할 때 발생된다.
과다한 하드 파싱은 일반적으로 상수(literal)값을 가지고 SQL문을 사용하는 애플리케이션에서 발생한다. 하드파스는 매우 비싼 오퍼레이션이며, 파스(parse)를 수행하는 동안 child library cache 래치를 소유하고 있어야 한다. --> SQL문을 찾아 바인딩 변수로 변경을 권고한다.
-- 하드파싱의 발생량
select a.*, sysdate - b.startup_time days_old
from v$sysstat a, v$instance b
where a.name like 'parse%';
-- 과다한 하드 파스를 수행하는 현재 세션 확인
select a.sid, c.username, b.name, a.value,
round((sysdate - c.logon_time) * 24) hours_connected
from v$sesstat a, v$statname b, v$session c
where c.sid = a.sid
and a.statistic# = b.statistic#
and a.value > 0
and b.name = 'parse count (hard)'
order by a.value desc;
-- liternal SQL 식별 쿼리
select hash_value, substr(sql_text, 1, 80) --> 40글자가 동일한 SQL문을 찾는다.
from v$sqlarea
where substr(sql_text,1,40) in (select substr(sql_text,1,40)
from v$sqlarea
having count(*) > 4
group by substr(sql_text,1,40))
order by sql_text;
'wow db Log > oracle' 카테고리의 다른 글
오라클 M-VIEW 만들기 (0) | 2009.08.30 |
---|---|
[오라클오류] ORA-30004 when using SYS_CONNECT_BY_PATH 오류 (0) | 2009.08.17 |
Oracle 10G sga 영역 설정 변경하기 (0) | 2009.07.25 |
오라클 캐릭터 셋 설정 (0) | 2009.05.28 |
Oracle Database 10g: DBA를 위한 20가지 주요 기능 (0) | 2009.05.13 |