Oracle 에서 explain plan 쿼리 계획

2024. 5. 2. 10:29·개발/ORACLE
목차
  1. Mysql
  2. Oracle
  3. Oracle 결과
  4. plan 보는 법
  5. plan 실행 순서
  6. plan table 구조
  7. plan table 구조 설명
728x90
반응형

Mysql에서 쿼리 튜닝을 위해 혹은 인덱스를 걸기 위해 자주 사용했던 explain.

Oracle에서는 문법이 다른데 어떻게 다른지 사용법을 알아보자


Mysql

EXPLAIN
SELECT * 
FROM {table_name};
-- update, insert, delete 문에도 확인 가능

 

Oracle

-- 실행 계획 저장
EXPLAIN PLAN 
	SET STATEMENT_ID = '{PLAN value}'
	FOR
SELECT * 
FROM {table_name};

-- 저장된 실행 계획 보기
SELECT * 
FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE','{PLAN value}','ALL'));

 

Oracle 결과

EXPLAIN PLAN
    SET STATEMENT_ID ='test'
    FOR
SELECT * FROM dual;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'test', 'ALL'));


plan 보는 법

  • Id : 실행계획의 오퍼레이션 Id
  • Operation : 해당단계에 수행한 작업 내용
  • Name : 해당단계에 작업을 수행한 대상 오브젝트(테이블 or 인덱스)
  • Rows : 해당 단계 수행 시 조회될 예상 데이터 건수
  • Bytes : 해당 단계까지 사용될 예상 데이터 양(누적)
  • Cost : 해당 단계까지 사용될 예상 비용(누적)
  • Time : 해당 단계까지 사용될 예상 시간(누적)

 

plan 실행 순서

부모보다 자식이 먼저 실행된다.

가장 안에서 위에서 를 기억하면 편하다.

위 결과의 순서는 5 -> 4 -> 6 -> 3 -> 7 -> 2 -> 8 -> 1 -> 0 순으로 진행된다.

그렇다면 아래 plan의 실행 순서는 어떻게 될까?

더보기

정답은 3 -> 5 -> 4 -> 2 -> 7 -> 6 -> 1 -> 0

 

plan table 구조

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

 

plan table 구조 설명

더보기

 

항목 설명
STATEMENT_ID 쿼리를 고유하게 식별하는 ID
PLAN_ID 실행 계획의 고유한 ID
TIMESTAMP 실행 계획이 생성된 시간
REMARKS 실행 계획에 대한 추가 정보
OPERATION 실행 계획에서 수행되는 연산
OPTIONS 연산에 대한 추가 옵션
OBJECT_NODE 연산이 수행되는 노드
OBJECT_OWNER 연산이 수행되는 객체의 소유자
OBJECT_NAME 연산이 수행되는 객체의 이름
OBJECT_ALIAS 연산이 수행되는 객체의 별칭
OBJECT_INSTANCE 연산이 수행되는 객체의 인스턴스
OBJECT_TYPE 연산이 수행되는 객체의 타입
OPTIMIZER 사용된 옵티마이저
SEARCH_COLUMNS 검색된 칼럼 수
ID 노드의 고유 ID
PARENT_ID 부모 노드의 ID
DEPTH 노드의 깊이
POSITION 노드의 위치
COST 노드의 비용
CARDINALITY 노드가 반환하는 행 수
BYTES 노드가 반환하는 바이트 수
OTHER_TAG 다른 정보
PARTITION_START 파티션 범위의 시작
PARTITION_STOP 파티션 범위의 끝
PARTITION_ID 파티션 ID
OTHER 다른 정보
DISTRIBUTION 노드의 분배 방법
CPU_COST 노드의 CPU 비용
IO_COST 노드의 IO 비용
TEMP_SPACE 노드에서 사용하는 임시 공간
ACCESS_PREDICATES 액세스 수행 시 사용되는 조건
FILTER_PREDICATES 필터링 시 사용되는 조건
PROJECTION 노드에서 사용되는 프로젝션
TIME 노드에서 소요된 시간
QBLOCK_NAME 블록 이름
OTHER_XML 다른 정보

 

 

728x90
반응형
저작자표시 (새창열림)

'개발 > ORACLE' 카테고리의 다른 글

Oracle 튜닝 - 실행 계획  (0) 2024.08.02
Oracle From 절에 2개 이상의 테이블 JOIN, (+)  (0) 2024.05.22
Oracle install 19c  (0) 2024.05.16
Oracle의 V$RESOURCE_LIMIT과 process / session  (0) 2024.05.07
Oracle 에서 limit 구현하기  (0) 2024.04.29
  1. Mysql
  2. Oracle
  3. Oracle 결과
  4. plan 보는 법
  5. plan 실행 순서
  6. plan table 구조
  7. plan table 구조 설명
'개발/ORACLE' 카테고리의 다른 글
  • Oracle From 절에 2개 이상의 테이블 JOIN, (+)
  • Oracle install 19c
  • Oracle의 V$RESOURCE_LIMIT과 process / session
  • Oracle 에서 limit 구현하기
joolog
joolog
  • joolog
    JOO
    joolog
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • 개발 (83)
        • JAVA (29)
        • PYTHON (9)
        • AWS (15)
        • DOCKER (2)
        • PERCONA (2)
        • ORACLE (14)
        • MYSQL (1)
        • 알고리즘 (0)
        • 기타 (11)
      • 툴 (5)
        • MARKDOWN (1)
        • GIT (1)
        • DOCKER (1)
        • PyCharm (2)
        • IntelliJ (0)
      • 일상 (35)
        • 맛집 (6)
        • 카페 (2)
        • 요리 (4)
        • 글씨 연습 (2)
        • 그저 일상 (7)
        • 내돈 내산 (11)
        • 홍보 (1)
      • 국내 여행 (1)
      • 해외 여행 (15)
        • 체코-오스트리아 (10)
        • 일본 (5)
      • 암 일지 (26)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 관리
    • 티스토리 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    체코
    티스토리챌린지
    자바
    mysql
    잘츠부르크
    Oracle
    오스트리아
    요양병원
    자바JDBC
    오블완
    저요오드식
    재발
    오닉스 리프3
    동위원소
    jdbc
    오라클
    히로시마
    글씨연습
    성모샘쉼터
    갑상선 암
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
joolog
Oracle 에서 explain plan 쿼리 계획

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.