ORACLE 실제 실행계획
예상 실행계획만으로는 성능 개선이 어려울때가 있으므로 실제 실행계획을 보고 문제점을 찾을수 있어야 한다
실제 실행 계획 확인 하는 방법
GATHER_PLAN_STATISTICS를 힌트로 사용 OR 세션에 트레이스를 거는 방법이 있음
1) GATHER_PLAN_STATISTICS 사용 법
- SYS계정으로 접속하여
V_$SQL
V_$SQL_PLAN_STATISTICS_ALL
V_$SQL_PLAN
V_$SESSION에 SELECT 권한을 추가 한다
GRANT SELECT ON V_$SQL TO USER_명 ;
GRANT SELECT ON V_$SQL_PLAN_STATISTICS_ALL TO USER_명 ;
GRANT SELECT ON V_$SQL_PLAN TO USER_명 ;
GRANT SELECT ON V_$SESSION TO USER_명 ;
- GATHER_PLAN_STATISTICS을 SQL문에 힌트로 추가
SELECT /*+ GATHER_PLAN_STATISTICS */
*
FROM TB_SW23215
WHERE COMP_CD = '11'
AND SANC_DT BETWEEN TO_DATE('20210101','YYYYMMDD') AND TO_DATE('20210103','YYYYMMDD') ;
- GATHER_PLAN_STATISTICS 힌트를 사용한 SQL의 SQL_ID와 CHILD_NUMBER 확인
. USER로 접속
SELECT SQL_ID, CHILD_NUMBER, SQL_TEXT
FROM V$SQL
WHERE SQL_TEXT LIKE '%GATHER_PLAN_STATISTICS%' ;
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(SQL_ID, CHILD_NUMBER, 'ALLSTATS LAST'));
=> 확인한 SQL_ID, CHILD_NUMBER를 넣어 조회 하면 아래와 같은 실제 실행계획이 나온다
◈ 항목
id : 실행계획의 오퍼레이션
Operation : 해당 단계에 수행한 작업 내영
Name : 해당 단계에 작업을 수행한 대상 오브젝트(테이블 or 인덱스)
Starts : 해당 단계를 수행한 횟수
E-Rows : 해당 단계의 예상 데이터 건수
A-Rows : 해당 단계의 실제 데이터 건수
A-Time : 해당 단계까지의 수행된 실제 시간(누적)
Buffers : 해당 단계까지 메모리 버퍼에서 읽은 블록수(논리적 IO 횟수, 누적)
Reads : 해당 단계까지 디스크에서 읽은 블록수(물리적 IO 횟수, 누적)
성능 개선을 위해서는 A-Rows, A-Time, Buffers를 확인해야 한다
(높은 수치가 나오는 항목의 원인을 찾아 성능을 개선!!!)