동일 SQL 실행 시 처음호출하듯이 하는 방법 없나요? 0 4 8,371

by 오라?오라~ [Oracle Tuning] FLUSH SHARED POOL BUFFER CACHE [2012.04.27 17:50:43]



안녕하세요~ ^^
쿼리 튜닝 작업을 하고있는 개발자입니다.

쿼리가 정상적으로 튜닝되었는지에 대해 
수행계획의 cost도 확인하지만,
실제 쿼리가 수행된 속도도 보고 있습니다.


그런대 쿼리를 여러번 실행 하면
처음 실행할 때보다 수행속도가 빨라지는 대요.

이게 자주 수행하는 쿼리에 대해 메모리에
저장되어 있는 정보를 이용하기 때문이라고 알고잇습니다.
(오버헤드를 줄이는 방법으로 shared pool의 dictionary cache를 이용하기때문? 맞나요?;ㅎ ) 


그래서 질문은 아래와 같습니다.

  1.  기존 실행한 쿼리 정보를 메모리에서 지울 수 있는 방법이 있습니까?
   
  2.  1과 같은 얘기일수 있읍니다만 , 쿼리가 파싱된 정보를 지워서
   매번 새로운 쿼리처럼 실행되도록 할 수 있습니까?  (뷰 v$sql, ... 등의 정보)
(대소문자, 공백추가 등 쿼리를 수정해보았지만 이방법은 안닌거 같아서..)




답변을 부탁드립니다 ^^


*현재 이용하는 oracle 버전은 10g입니다.








by 부쉬맨 [2012.04.27 17:56:01]
alter system flush shared_pool;
이렇게해주면 v$sql이 초기화되죠..

by 오라?오라~ [2012.04.27 18:13:55]

@부쉬맨
    빠른 답변 감사합니다 ^^ . 
    하지만 v$sql (shared pool)을 초기화해도
    동일쿼리의 속도가 느려지지는 않았습니다. 

   SQL> select count(1) from 대용량table a;
  -- 1차 속도 : 2.091 sec
  -- 2차    : 0.608 sec
  -- 3차   : 0.624 sec
   SQL> alter system flush shared_pool;
  
   SQL> select count(1) from 대용량table a;
  -- 재호출 속도 : 0.717 sec



by 현 [2012.04.27 18:18:06]

flush를 해서 속도를 개선하는 방법도 있긴 하겠지만,
보통은 속도를 보지 않고 일의 양을 보고 판단 합니다.

수행전 플랜의 COST를 보는 것은 좀 의미가 없구요,
수행후에 얼마나 일을 했는지 LOGICAL BLOCK 을 읽은 수로 확인하시는 것이 좋을 듯 합니다.
LOGICAL BLOCK 수를 보는 방법은 TRACE, XPLAN 등으로 확인 하시면 됩니다.

by 타락천사 [2012.04.27 22:20:22]

alter system flush buffer cache ;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입