쿼리를 튜닝할때 sqlplus 에서 set timing on 설정후 쿼리 수행 혹은
토드에서 수행시간을 확인할 수 있다.
SELECT
USE_DT, TRANSP_OPER_ORG_ID, PCARD_USER_CLASS_CD
FROM TBBZS800
WHERE USE_DT BETWEEN &fromDt AND &toDt
위 쿼리가 Full Scan 을 수행했을경우
SELECT
/*+ INDEX(TBBZS800 PK_TBBZS800) */
USE_DT, TRANSP_OPER_ORG_ID, PCARD_USER_CLASS_CD
FROM TBBZS800
WHERE USE_DT BETWEEN &fromDt AND &toDt
이런 식으로 변경해서 수행시간을 테스트할 수 있을 것이다.
하지만 한번 수행한 이후에는 해당 블록들을 Data Buffer Cache에 보관하고 있기때문에 정확한 시간 측정이 힘들다
현재 작업중인 쿼리로는 초기 수행시 2분16초 짜리 쿼리가 Data Buffer Cache에 올라간 이후에는 11초정도의 평균 수행시간을 보여준다
이 경우에는 강제로 Data Buffer Cache를 비워준 이후에 측정하면 된다
오라클 10g 의 경우
ALTER SYSTEM FLUSH BUFFER_CACHE;
9i 이하일경우는
ALTER SESSION SET EVENTS = ‘IMMEDIATE TRACE NAME FLUSH_CACHE’;
를 수행하면 Data Buffer Cache를 Flush 시킨다
제대로 한다면 쿼리의 파싱속도 자체도 영향을 미치는 조건이므로 Shared Pool 도 Flush 시켜줘야될 필요성이 있다
이경우는
ALTER SYSTEM FLUSH BUFFER_POOL;
를 수행하면 Shared Pool 이 초기화 되게된다