[ORACLE] 플랜 보는법

KosMos·2022년 10월 24일
0

EXPLAIN PLAN
https://coding-factory.tistory.com/745

  1. SQL DEVELOPER 프로그램 사용
    사용할 SQL에서 F10키를 누르면 확인가능

  2. EXPLAIN PLAN
    아래와 같은 형태로 쿼리를 실행한다
    EXPLAIN PLAN FOR
    SELECT *
    FROM EMP
    WHERE EMPNO = '200101'

    쿼리실행후 실행계획 확인하기
    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());

  • 실행계획 항목의미
    • Id : 실행계획의 오퍼레이션ID
    • Operation : 해당단계에 수행한 작업 내용
    • Name : 해당단계에 작업을 수행한 대상 오브젝트(테이블 or 인덱스)
    • Rows : 해당 단계 수행 시 조회될 예상 데이터 건수
    • Bytes : 해당 단계까지 사용될 예상 데이터 양(누적)
    • Cost : 해당 단계까지 사용될 예상 비용(누적)
    • Time : 해당 단계까지 사용될 예상 시간(누적)
  • 실행계획 순서
    • 부모자식 중에는 자식이우선
    • 형제간에는 형이 우선.
  1. 세션 유지하는동안 수행된 SQL에 대한 실행계획보기
  • ALTER SESSION SET STATISTICS_LEVEL = ALL;
  1. 실제 실행계획 확인하기 (GATHER_PLAN_STATISTICS)
  • SELECT 권한이 필요한 VIEW
    • V_$SQL
    • V_$SQL_PLAN_STATISTICS_ALL
    • V_$SQL_PLAN
    • V_$SESSION
  • 실제 실행계획 만들기
    SELECT /+ GATHER_PLAN_STATISTICS /
    **
    FROM TABLE
    WHERE 조건들 살라살라
  • 실제 실행계획을 만든 SQL의 SQL_ID찾기
    SELECT T1.SQL_ID, T1.CHILD_NUMBER, T1.SQL_TEXT
    FROM V$SQL T1
    WHERE T1.SQL_TEXT LIKE '%GATHER_PLAN_STATISTICS%'
    ORDER BY T1.LAST_ACTIVE_TIME DESC;
  • 실제 실행계획 조회하기
    SELECT *
    FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('SQL_ID', 0 ,'ALLSTATS LAST'));
    마지막실행쿼리를 조회하려면 인자를 NULL, NULL, 'ALLSTATS LAST'
    • 포멧별 조회방법
      예측치 빼고조회 : SELECT FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('SQL_ID', 0 ,'ALLSTATS LAST -ROWS'));
      추가 힌트,쿼리블록정보 포함 :
      SELECT FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('SQL_ID', 0 ,'ALLSTATS LAST +OUTLINE +ALIAS'));
  • 실제 실행계획 조회 결과항목
    • ID : 실행계획의 OPERATIONI
    • OPERATION : 해당단계에 수행한 작업내용
    • Name : 해당 단계에 작업을 수행한 대상 오브젝트(테이블 또는 인덱스)
    • Starts : 해당단계를 수행한 횟수
    • E-Rows : 해당단계 예상 데이터 건수
    • A-Rows : 해당단계의 실제 데이터 건수
    • A-Time : 해당 단계까지 수행된 실제 시간(누적)
      (A-Time은 복잡한 실행계획이나 병렬쿼리에서는 부정확한경우도있다)
    • Buffers : 해당 단계까지 메모리 버퍼에서 읽은 불록수(논리적IO횟수, 누적)
    • Read : 해당단계까지 디스크에서 읽은 블록수(물리적IO횟수, 누적)
    • 0Mem, 1Mem, Used-Mem:SQL 처리를 위해 사용한 메모리 수치
  • A-Rows, A-Time, Buffers, Read를 주의 깊게 보고
    수치가 높아진단계가 있다면 해당부분의 원인을 찾아 성능개선을 하면 된다.

0개의 댓글