2008년 11월 14일 금요일

STORED OUTLINE

outline을 사용하기 위해서는 다음의 명령어를 사용합니다.

 SQL> alter session set use_stored_outlines = true or category_name ;

생성 시와 마찬가지로 category 이름을 지정하거나 true를 지정하여 SO를 사용할 수 있습니다.

Category를 지정하면 그 category에서부터, Category를 지정하지 않으면 디폴트
category로부터 질의문과 일치되는 outline문장을 찾기 시작합니다. 만일, 지정한 category에서
일치되는 outline이 없는데 디폴트 category에 해당 outline이 있으면 그 outline이 사용됩니다.
 

다시 정리하자면 질의문에 대해 outline을 이용한  실행 계획을 결정하기 위해서는 다음과 같은
순서를 따릅니다.

① shared pool에서 일치하는 문장과 outline category 찾기
② ①에서 없으면 data dictionary에서 outline을 질의
③ ②에서 찾으면 해당 SQL을 outline에 통합하고 실행 계획을 만듭니다.
④ ②에서 없으면 보통의 방법(non-outline)으로 실행됩니다.

일단 참조할 outline이 결정되면, 참조하는 category에 지정된 실행 계획에 의거하여 질의문을 수행합니다. 물론, 이때 사용되는 outline의 hints는 outline 생성 시 user_outlines에 저장이 되면서 생성된 user_outline_hints에 기록된 방식을 사용합니다.

 

-------------------------------------------------------------------------------------------------------------------

출처 : http://blog.naver.com/do4girlz?Redirect=Log&logNo=20003299209

-------------------------------------------------------------------------------------------------------------------

 

[개요]

  옵티마이저에 영향을 줄 수 있는 Factor에 상관없이 사용자가 지정한 실행 계획으로
  옵티마이저가 수행하도록 하는 방법을 알아본다.

[예제]

  $ sqlplus scott/tiger
 
  SQL> CREATE OUTLINE employee FOR CATEGORY spec
            ON SELECT * FROM emp WHERE empno=7788;

  SQL> set autotrace on

  SQL> SELECT * FROM emp WHERE empno=7788;

            Execution Plan
            -------------------------------------------------------
            SELECT STATEMENT 
                TABLE ACCESS FULL  | EMP  |   

  SQL> CREATE INDEX empno_idx ON emp(empno);

  SQL> SELECT * FROM emp WHERE empno=7788;

          Execution Plan
          -----------------------------------------------------------------
          SELECT STATEMENT     
            TABLE ACCESS BY INDEX ROWID| EMP     
              INDEX RANGE SCAN          | EMPNO_IDX |

  SQL> ALTER SESSION SET use_stored_outlines=spec;

  SQL> SELECT * FROM emp WHERE empno=7788;

          Execution Plan
          -------------------------------------------------------
            SELECT STATEMENT 
                TABLE ACCESS FULL  | EMP  |

          Note
          --------
            - outline "EMPLOYEE" used for this statement

----------------------------------------------------------------------------------------------

출처 : http://cafe.naver.com/techora.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=10

댓글 없음:

댓글 쓰기