ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 실행 계획
    실무에서 배운 내용 정리 2018. 12. 19. 00:20

    실행 계획

    DB의 두뇌라고 할 수 있는 옵티마이저가 해당 쿼리를 수행할 때, 수행되는 일련의 동작 순서를 트리 형식으로 보여줌 

    => 이를 통해 쿼리문의 성능을 짐작할 수 있음


    특징

    1. 실제로 실행되는 것이 아니라, 어떻게 실행 되는지를 보여줌

    2. 실행 계획은 완벽하지 않음 => 따라서 실행 계획을 볼 줄 알아야하고 변경할 줄 알아야함

    3. 실행계획은 다음과 같은 정보를 포함하고 있음

    1) 쿼리문이 참조한 테이블들의 순서

    2) 쿼리문이 참조한 테이블들의 접근방법(ACESS PATH)

    3) 조인에 의해 영향받는 테이블들의 조인방법(JOIN MEHTOD)

    4) 데이터 조작방법(filter, sort, or aggregation,etc)

    4. 실행계획은 개발자가 다음과 같은 피해야하는 항목(=나쁜 냄새)들을 미리 파악할 수 있게 도와줌

    1) Full scans : 의도하지 않은 풀 스캔

    2) Unselective range scans : 100건을 조회하기 위해 1,000,000건을 스캔하는 경우

    3) Late predicate filters : 적절치 않은 predicate(조건)을 가지고 데이터를 읽고/필터링하는 경우
        - access predicate : 데이터 블록을 어떤 방식으로 access했는지 보여줌 
        - filter predicate :  데이터 블록을 읽고 나서 어떻게 filter했는지 보여줌

    4) Wrong join order : 잘못된 조인순서는 처리범위를 증가시킴

    5) Late filter operations : 필터로 버릴 것이 있다면 조인 전에 필터하는 것이 좋음


    접근 경로(ACCESS PATH) 

    데이터를 SCAN하는 방식 => 데이터를 추출하기 위해 사용되기 때문에 성능 관점에서 매우 중요 (옵티마이저에 의해 결정)


    주요 접근 경로

    Table 

    Full Table Scan

    Table Access by Rowid : 데이터 접근 시 특정 Row의 주소인 ROWID를 통해 읽음

    Sample Table Scan : 테이블에서 임의로 일정한 분량의 자료를 읽음

     Index

    Index Unique Scan 

    Index Range Scan

    Index Full Scan

    Index Fast Full Scan : 인덱스 전체를 읽어야 할 경우 Index Full Scan보다 Index Fast Full Scan 이 빠름

    Index Skip Scan : 결합 인덱스인 경우, 선행 컬럼의 조건값이 입력되지 않으면 두번째 컬럼 값이 인덱스의 어느 위치에 존재하는지 알 수 없음. 이렇게 선행 컬럼이 입력되지 않은 경우 인덱스 블록을 순차적으로 읽음

    Index Join : 두 개 이상의 인덱스를 스캔한 후 ROWID끼리 HASH JOIN



    실행 계획 읽는 순서
    1. 가장 안쪽으로 들여쓰기 된 것부터 읽어서, 한 단계씩 상위로 읽어 나옴
    2. 들여쓰기가 같다면, 무조건 위 -> 아래 순으로 읽음

    ex) 
    읽는 순서 : 4-> 3 -> 5 -> 2 -> 1 


    이미지 링크 : https://m.blog.naver.com/PostView.nhn?blogId=genie319&logNo=100147787477&proxyReferer=https%3A%2F%2Fwww.google.com%2F



    [보충 설명]

    옵티마이저 

    1. DBMS의 핵심 엔진(두뇌 역할)

    2. 실행 계획을 세우는 일을 담당

    3. 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로 생성


    옵티마이저 종류

    1. 규칙 기반 옵티마이저

    처리 방식의 우선순위를 정해 놓고 가능한 한 우선순위가 앞서는 방식을 채택하는 방식

    2. 비용 기반 옵티마이저

    예상되는 추측 시간 중, 최소 시간을 채택하는 방식



    한글로 잘 정리된 링크 : 

    1. http://wiki.gurubee.net/pages/viewpage.action?pageId=688200

    2. https://12bme.tistory.com/160

    3. http://www.nextree.co.kr/oracle-explain-plan-sayong/




    참고 : https://docs.oracle.com/cd/E25178_01/server.1111/e16638/ex_plan.htm

    댓글

Designed by Tistory.