CAFE

DB

[Toad]토드에서 Explain Plan 보는 방법.(Toad 버전 8.5) / Toad 9.5.0 - plan error ora-00933 내용 추가

작성자tkdsong|작성시간07.01.30|조회수2,561 목록 댓글 0

===========================================================================

◆ 범례

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

  대문자 : Reserved Word(오라클 예약어)

  소문자 : User Define (사용자가 직접 입력해야 하는 부분)

  []       : Option (지정하지 않아도 되거나 생략시 기본 설정값으로 대체됨)

  or       : Choice(여러가지중 하나를 선택한다.)

===========================================================================

토드를 실행한다.

실행 유저는 DBA계정이어야 한다.

SQL EDITOR 를 실행하고 아래문을 실행시킨다.

 

1. PLAN 테이블 , INDEX 생성 및 권한 설정

 

CREATE TABLE PLAN_TABLE

(
  STATEMENT_ID       VARCHAR2(30 BYTE),
  PLAN_ID            NUMBER,
  TIMESTAMP          DATE,
  REMARKS            VARCHAR2(4000 BYTE),
  OPERATION          VARCHAR2(30 BYTE),
  OPTIONS            VARCHAR2(255 BYTE),
  OBJECT_NODE        VARCHAR2(128 BYTE),
  OBJECT_OWNER       VARCHAR2(30 BYTE),
  OBJECT_NAME        VARCHAR2(30 BYTE),
  OBJECT_ALIAS       VARCHAR2(65 BYTE),
  OBJECT_INSTANCE    INTEGER,
  OBJECT_TYPE        VARCHAR2(30 BYTE),
  OPTIMIZER          VARCHAR2(255 BYTE),
  SEARCH_COLUMNS     NUMBER,
  ID                 INTEGER,
  PARENT_ID          INTEGER,
  DEPTH              INTEGER,
  POSITION           INTEGER,
  COST               INTEGER,
  CARDINALITY        INTEGER,
  BYTES              INTEGER,
  OTHER_TAG          VARCHAR2(255 BYTE),
  PARTITION_START    VARCHAR2(255 BYTE),
  PARTITION_STOP     VARCHAR2(255 BYTE),
  PARTITION_ID       INTEGER,
  OTHER              LONG,
  DISTRIBUTION       VARCHAR2(30 BYTE),
  CPU_COST           INTEGER,
  IO_COST            INTEGER,
  TEMP_SPACE         INTEGER,
  ACCESS_PREDICATES  VARCHAR2(4000 BYTE),
  FILTER_PREDICATES  VARCHAR2(4000 BYTE),
  PROJECTION         VARCHAR2(4000 BYTE),
  TIME               INTEGER,
  QBLOCK_NAME        VARCHAR2(30 BYTE),
  OTHER_XML          CLOB
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;

 

CREATE UNIQUE INDEX PLAN_INDEX ON PLAN_TABLE(STATEMENT_ID,ID);

 

GRANT SELECT ON PLAN_TABLE_KENCA2011 TO user_id;   ->> user_id 는 로그인계정 (KENCA1)


[출처] toad 실행 계획 설정

 

2.TOAD에서 PLAN TABLE 설정하기

  1) 메뉴에서 설정

     View -> Options -> Oracle -> General

 

 

2) 좌측 부분에서 Oracle 하위에 General 선택 

  -> Explin Table Name에 생성한 테이블 이름(PLAN_TABLE)을 입력한 수 [OK] 클릭

 

 

3)   query문을 실행한 후에 Ctrl+E를 누르면 실행계획이 보인다.
 

 

==========================================================================================

참조 내용들..............

 

 

CREATE USER TOAD IDENTIFIED BY TOAD
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON USERS
QUOTA 0K ON SYSTEM;

주의 : 굵게 표시한 문장은

Toad메뉴 VIEW → Option  → Oracle → General 에서

Explan Plan Table명을 PLAN_TABLE으로 수정 합니다.

와 같이 표시한 문으로 표시하여 실행하여야 한다.

예) CREATE USER TOAD IDENTIFIED BY TOAD -> CREATE USER PLAN_TABLE IDENTIFIED BY PLAN_TABLE

토드의 View-Options 메뉴를 실행시켜서 왼쪽에 Oracle메뉴에 Explain Plan table name을 생성된 plan table명으로 바꾸고서 실행해 보세요..

 


오라클 클럽의 자료

=================================================================================

 

☞ 1단계

ORACLE_HOME/rdbms/admin/utlxplan.sql파일을 실행 시킵니다.

 

☞ 2단계
Toad메뉴 VIEW → Option  → Oracle → General 에서

Explan Plan Table명을 PLAN_TABLE으로 수정 합니다.

 

☞ 3단계
Toad에서 Explain Plan 탭을 선택해서 조회 할 수 있습니다.

 

Toad 버전 8.5

 

============================================================

참고사항

 

토드에서 explain plan을 볼려면 아래의 스크립트를 실행 시킵니다.
C:\Program Files\Quest Software\TOAD\temps\toadprep.sql



 

toadprep.sql을 열어보면 toad유저를 생성할 때..
테이블스페이스를 지정하는데 데이타베이스에 존재하는 테이블 스페이스에 맞게 수정해야 합니다.


 

=============== 아래 부분은 제 오라클에 맞게 수정한 부분입니다. ===================

CREATE USER TOAD IDENTIFIED BY TOAD
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON USERS
QUOTA 0K ON SYSTEM;

============================================================================


 

toadprep.sql스크립트가 에러없이 수행이 되면 오라클에 toad라는 유저가 생성되고...

toad_plan_table, toad_plan_sql 테이블이 생성이 됩니다.

또한 시퀀스, 시노님, 권한부여, 함수가 에러없이 생성이 되면 설치가 다 끝난겁니다.


 

실행계획을 보는 방법은 우선 SQL을 실행할 유저로 토드를 접속합니다..


 

그리고 나서 sql 을 실행하고 나면 토드 아래에  explain plan과 autotrace를 보면 됩니다.


 

아래의 그림은 제 피시에서 실행한 예 입니다..아래의 explain plan이 보이지 ?을 경우에는 토드 메뉴에서 view->explain plan을 선택하거나 아래 그림 맨 오른쪽 세번째 있는 엠브런스차 아이콘을 클릭하면 됩니다..



실행 계획을 보는 방법은 Operation 컬럼에 나온 내용과 아래의 표를 참고해서  보시면 됩니다.

그리고 Explain Plan 오른쪽에   Auto Trace를 보면 Trace정보가 나옵니다..


 

AutoTrace관련 몇 가지를 설명하면 아래와 같습니다.

  • db block gets : current gets에 대한 논리적인 IO횟수(in memory)
  • consistent gets : read-consistent gets에 대한 논리적인 IO횟수(in memory)
  • physical reads : Disk에서 읽은 블럭수
  • redo size : (DML)문에 의해 생성된 redo의 양
  • sorts(memory) : memory에서 수행된 sort횟수
  • sorts(disk) : Temporary 영역에서 sort된 횟수


    ☞ OPERATION의 종류와 OPTIONS에 대한 설명

    OPERATION(기능)

    OPTIONS(옵션)

    설      명

    AGGREGATE

    GROUP BY

    그룹함수를 사용하여 하나의 로우가 추출되도록 하는 처리(버전 7에서만 표시됨)

    AND-EQUAL


    인덱스 머지를 이용하는 경우

    CONNECT BY


    CONNECT BY를 사용하여 트리 구조로 전개

    CONCATENATION


    단위 액세스에서 추출한 로우들의 합집합을 생성

    COUNTING


    테이블의 로우스를 센다

    FILTER


    선택된 로우에 대해서 다른 집합에 대응되는 로우가 있다면 제거하는 작업

    FIRST ROW


    조회 로우 중에 첫번째 로우만 추출한다.

    FOR UPDATE


    선택된 로우에 LOCK을 지정한다.

    INDEX

    UINQUE

    RANGE SCAN

    RANGE SCAN
    DESCENDING

    UNIQUE인덱스를 사용한다. (단 한개의 로우 추출)

    NON-UNIQUE한 인덱스를 사용한다.(한 개 이상의 로우)

    RANGE SCAN하고 동일하지만 역순으로 로우를
    추출한다.

    INTERSECTION


    교집합의 로우를 추출한다.

    MERGE JOIN




    OUTER

    먼저 자신이ㅡ 조건만으로 액세스한 후 각각을 SORT하여
    MERGE해 가는 조인

    위와 동일한 방법이지만  outer join을 사용한다.

    MINUS


    MINUS 함수를 사용한다.

    NESTED LOOPS




    OUTER

    먼저 어떤 드라이빙 테이블의 로우를 액세스한 후 그 결과를
    이용해 다른 테이블을 연결하는 조인

    위와 동일하지만 outer join을 사용한다.

    PROJECTION


    내부적인 처리의 일종

    REMOTE


    다른 분산 데이터베이스에 있는 오브젝트를 추출하기 위해
    DATABASE LINK를 사용하는 경우

    SEQUENCE


    시퀀스를 액세스 한다.

    SORT

    UNIQUE

    GROUP BY

    JOIN

    ORDER BY

    같은 로우를 제거하기 위한 SORT

    액세스 결과를 GROUP BY 하기 위한 SORT

    MERGE JOIN을 하기 위한 SORT

    ORDER BY를 위한 SORT

    TABLE ACCESS

    FULL

    CLUSTER

    HASH

    BY ROWID

    전체 테이블을 스캔한다.

    CLUSTER를 액세스 한다.

    키값에 대한 해쉬 알고리즘을 사용(버전 7에서만)

     ROWID를 이용하여 테이블을 추출한다.

    UNION


    두 집합의 합집합을 구한다.(중복없음)
    항상 전체 범위 처리를 한다.

    UNION ALL


    두 집합의 합집합을 구한다.(중복가능)
    UNION과는 다르게 부분범위 처리를 한다.

    VIEW


    어떤 처리에 의해 생성되는 가상의 집합에서 추출한다.(주로 서브쿼리에 의해 수행된 결과)

  • 출처 - http://www.oracleclub.com/  검색조건 : TOAD , 메뉴:Toad for Oracle
  • =========================================================================================================

     

    기타 사항

    플랜테이블 내역보기

    TOAD에  plan_table
    토드에서 ALT+ENTER

     

     

    실행계획을 보기 위해서는 제일 먼저

    ORA_HOME/RDBMS/ADMIN/UTLXPLAN.SQL

    이 파일을 실행하라고 되어있는데요

    찾아보니 전 이 파일이 존재 하지 않아서요

    그래서 바로 PLAN_TABLE지정하고

    토드에서 해당 탭을 열었더니 실행계획이 조회되긴 하더라구요.

    그래도 왠지 첫번째 단계를 빼먹어 찜찜해서요

    파일이 없는 경우에는 SQL문을 만들어줘야하는건지.

    ^^궁금해서 문의드립니다.

    참고로 Oracle은 9i버젼

    토드는 8.5.3.2입니다

     

    답변 : 이상없음.

     

    ==================================================================

    Toad 9.5.0

    기존 plan table 존재하나 쿼리 실행 후 플랜결과를 볼수 없었을때...

    Explain plan error ora-00933

     

     

    처리 후

    Sql Editor의 문장에 세미콜론 (;)을 찍어주던가... 한문장만 실행 후 확인 플랜 확인

    아래 그림은 토드사이트의 질문 답 화면

    그림 출처 : https://support.quest.com/SolutionDetail.aspx?id=SOL24538

     

     

    실행 예)

     

     

     

     

     

    다음검색
    현재 게시글 추가 기능 열기
    • 북마크
    • 신고 센터로 신고

    댓글

    댓글 리스트
    맨위로

    카페 검색

    카페 검색어 입력폼