Programming/Oracle

오라클 하드파싱 횟수 확인

초록깨비 2022. 4. 25. 16:27
728x90

리터럴(Literal) SQL

   WHERE절의 값에 문자,숫자 상수값을 하드코딩해서 작성한 것

   

    select emp_nm from emp where emp_id = '12345'

 

Bind Variable SQL

   WHERE절의 값을 바인드 변수 형태(:v)로 표시한 것  

 

     select emp_nm from emp where emp_id = :as_emp_id

 

 

리터럴 SQL문을 많이 사용하면 하드파싱의 빈도를  높아져서 Library Cache에서 

Cache되는 SQL문들이 자주 age out 하게 되고 Dictionary Cache의 사용율을 높인다

Shared SQL Area의 SQL문에서 리터럴 SQL을 찾아서 Bind Variable을 이용한 방법으로

바꾸어야 성능 향상이 된다.

 

 

 

오라클 하드파싱 횟수 확인(system계정)

 

SELECT SUBSTR(sql_text,1,60) "SQL", 

          COUNT(*),
          SUM(EXECUTIONS) "총실행횟수" 
 FROM V$SQLAREA
 WHERE SQL_TEXT LIKE '%Select Sf_Styleno_Chek%'
   --AND TRUNC(LAST_LOAD_TIME) = TO_DATE('20220425', 'YYYYMMDD')
 GROUP BY SUBSTR(sql_text,1,60)
 HAVING COUNT(*) > 0
 ORDER BY 3 desc;

 

 

 

 

 

소프트 파싱을 하기 위해 리터럴값을 바인드변수 값으로 변경 후

해당function이 제대로 소프트 파싱 되고 있는지 확인(system계정)

 

 

 

바인드 변수 처리 -> 동일한 SQL문장으로 인식 ->  소프트 파싱  1회,  실행은 33857회 함

 

 

 

전체 실행에 대한 하드파싱 확인

 

SELECT NAME,
       VALUE
FROM V$SYSSTAT
WHERE NAME = 'parse time cpu' or
          NAME = 'parse time elapsed' or 
          NAME like 'parse count%';

 

 

728x90