본문 바로가기
개발룸/SQL문

[SQL 성능분석하기] SQL문이 어떻게 실행될지 알려주는 실행계획

by 뉴스룸에 놀러와 주인장 2022. 12. 2.
반응형

1. 실행계획이란

 - SQL이 실행되어 데이터를 처리하고자 할 때, 수립되는 데이터 처리 방법이다.

 - 실행계획이 목적했던 대로 수립되지 않으면, SQL의 퍼포먼스(성능, 속도)에 문제가 발생한다.

 

SQL문이 어떤 경로를 통해서 실행될지에 대한 계획이다. 나를 알고 적을 알아야 백전백승이다. 실행계획을 보고 이를 분석하는 것은 튜닝의 사전단계이자 기본작업이다. 현재 내가 실행하는 SQL문이 어떻게 조회가 되는 지, 왜 느린지를 알아야 이를 더 효율적으로 개선할 수 있다.

 

 

2. 실행계획 확인 방법

오라클에는 실행계획 정보를 저장하는 SYS.PLAN_TABLE이 존재한다. 이 PLAN_TABLE에 있는 실행계획정보를 기록하는 명렁어가 있다. 그것이 바로 EXPLAIN PLAN이다. 

EXPLAIN PLAN 사용법

EXPLAIN PLAN을 보통 실행하는 SQL명령어 위에 써주면 된다. SET~ 부분은 임의의 ID를 부여하는 내용이다. 그 다음 FOR를 써주고 원래 실행하려는 SQL명렁어를 위치시키면 된다. 맨 위에 EXPLAIN PLAN을 써주는 것 말고는 별로 하는 게 없다. 그러면 내가 실행하려는 SQL문의 실행계획을 볼 수 있게 된다.

 

 - 명령문의 종류

  • EXPLAIN PLAN : 실행계획만을 확인할 수 있음
  • SET AUTOTRACE : 실행계획과 I/O관련 정보를 확인할 수 있음

다양한 종류가 있고, 그에 따른 특성이 다르니 본인이 원하는 결과에 따라 쓰는 구문이 다를 것이다.

옵션별 명령어 SQL수행 실행계획출력 실행결과출력 통계정보출력
SET AUTOTRACE ON O O O O
SET AUTOTRACE ON EXPLAIN O O O X
SET AUTOTRACE ON STATISTICS O X O O
SET AUTOTRACE ON TRACEONLY O O X O
SET AUTOTRACE TRACEONLY EXPLAIN
(= SET AUTO TRACEONLY EXP)
X
(DML은 O)
O X X
SET AUTOTRACE TRACEONLY STATISTICS O X X O

 

 

3. 실행계획의 분석

 - 실행계획은 데이터 처리를 위한 작업방법으로, 실행계획을 구성하는 내용의 분석을 통해 SQL의 비효율적인 부분을 확인할 수 있다.

  - 실행계획의 정확한 분석을 통해 SQL문장의 튜닝 포인트를 도출할 수 있다.

 

실행계획을 읽는 순서

  • 위에서 아래로 읽어 내려가면서 제일 먼저 읽을 스텝을 찾는다.
  • 내려가는 과정에서 같은 들여쓰기가 존재하면, 무조건 위 → 아래 순으로 읽는다.
  • 읽고자 하는 스텝보다 들여쓰기가 된 하위 스텝이 존재한다면, 가장 안쪽으로 들여쓰기 된 스텝을 시작으로 하여 한 단계씩 상위 스텝으로 읽어 나온다.

위의 규칙을 숙지하고 아래 문제를 읽어보면 아래와 같은 표로 읽는 순서를 그릴 수 있음을 알게 된다.

실행계획 읽기 예시

 

2와 5가 같은 레벨이다. 위에서 아래로 읽으므로 2 다음 5이다. 그런데 2 하위에는 3과 4가 있다. 이번에도 위에서 아래므로 3 → 4 → 2 → 5 → 1 → 0 순서로 읽게 된다. 이를 그림으로 정리 하면 다음과 같다.

실행계획 순서대로 읽음

이렇게 읽는 순서를 익힌다면 실행계획 표를 보고 실제 작업이 어떻게 수행되는지 읽을 수 있게 된다. 위 각각의 작업들이 어떤 역할을 하는지는 앞으로 차차 익혀나가면 될 것이고 지금은 표를 읽는 순서만 익혀보자.

 

실행계획은 SQL 튜닝의 가장 기본이 되는 분석 자료이다. 작성한 SQL의 드라이빙 테이블이 어떤 테이블로 선정되었는지, 어떤 인덱스를 사용하여 어떤 순서로 실행될 것인지를 파악하는 것은 SQL이 갖고 있는 기본적인 문제를 파악하고 쉽게 해결할 수 있도록 도와준다. SQL을 처음 다룰 때는 맞는 결과값이 나오는 지에만 집중하지만 그 SQL이 어떤 실행계획을 가지고 실행될지 예상하는 것은 시스템의 성능 향상에 기여하는 좀 더 중/고급적인 기술이라 할 수 있다.

반응형

댓글