DB/SQL튜닝

업무에 바로 쓰는 SQL튜닝 입문 - 1교시(실행계획)

Kang_hobin 2022. 9. 25. 16:37
1차시) [SQL 성능 분석하기] 실행계획
EXPLAIN PLAN
- SQL에 대한 실행계획만 확인
- 데이터를 처리하지 않음.
- 따라서 데이터베이스의 부하 X
튜닝 시 END 유저는 어떤 부하도 느껴선 안된다.

STATEMENT_ID가 TEST1 으로 저장되며 실행 계획이 TEST1이란 이름으로 PLAN_TABLE에 저장됨

그래서 PLAN_TABLE을 조회하는 쿼리를 날려야됨.
->
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'TEST1', 'ALL'));

데이터를 처리하지 않으므로 경과 시간 등 및 SORTING, IO관련 정보는 확인할 수 없음.

 

SET AUTOTRACE
SET AUTOTRACE ON; 처리 후 여러개의 SQL에 대한 실행계획을 바로 볼 수 있음.
데이터가 아주 큰 경우 EXPLAIN PLAN.(데이터를 읽지 않아야 함)
작은 데이터이면서 IO등의 데이터 처리 내용을 봐야한다면 SET AUTOTRACE.

 

SET AUTOTRACE 옵션
SET AUTOTRACE ON EXPLAIN;
-- 데이터처리 X. 실행계획 출력(통계정보 생략)
SET AUTOTRACE ON STATISTICS;
-- 출력 결과. 실행계획 생략, IO관련 정보 출력
SET AUTOTRACE TRACEONLY;
-- 출력 결과가 많을 시 사용.
-- 건수만 출력.
+ EXPLAIN, STATISTICS 옵션 추가 사용 가능.
-- EXPLAIN : 데이터 처리 X 실행계획만 추출.
-- STATISTICS : IO관련 정보만 표출(= 데이터 처리했다는 것). 실행계획 X.

완료 후
SET AUTOTRACE OFF;

가장 잘 활용 :
SET AUTOTRACE TRACEONLY EXPLAIN;
-- 데이터를 읽지 않아 부하가 없으며 실행계획만을 확인할 수 있기 때문.

 

실행계획 이유/ 실행계획 해석
SQL이 갖는 성능상의 이슈를 밝혀내기 위한 작업임.
성능부하에 이슈가 있다면 가장 먼저 실행계획을 확인하라.
실행계획의 ID | Operation 에서의
ID 기준 들여쓰기 기준으로 묶음처리.DEPTH로 묶임.
ID 기준으로 순서대로 실행되는 것임.

 

실행계획 Tree 구조로 그리기

실행순서에 따라 왼쪽부터 그림을 그림
-- 가장 아래의 가장 왼쪽이 제일 먼저 실행됨.
= 3번부터 실행

 

정리
SQL이 동작할 시 OPTIMAZER가 SQL을 해석 > 실행계획(데이터 처리 절차)을 수립함
실행계획이 성능을 좌우함.
-> SET AUTOTRACE, EXPLAIN PLAN

인덱스 설계상 문제, 테이블 설계상 문제는 확인할 수 없음.