SQL 튜닝 - 실행 계획 생성기
개요
이번 글에서는 실행 계획 생성기(Plan Generator)에 대해 자세히 다루어보겠다. 옵티마이저의 마지막 구성 요소인 실행 계획 생성기는 다양한 실행 계획을 생성하고, 각 계획의 예상 비용을 계산하여 최적의 실행 계획을 선택하는 역할을 한다. 실행 계획이 어떻게 생성되는지에 대한 개요를 제공하고 주요 개념을 간단한 예제를 통하여 다루어 보겠다.
실행 계획 생성기의 역할
실행 계획 생성기는 다양한 접근 경로, 조인 방법, 조인 순서를 시도하여 여러 실행 계획을 생성한다. 생성된 각 계획의 비용을 추정기 (Estimator)가 계산한 후, 가장 성능이 좋은 계획을 선택하여 Row Source Generator에 전달한다.
실행 계획 생성 방법
- 접근 경로: 접근 경로는 테이블 데이터를 읽는 방법을 나타낸다. 인덱스를 사용하거나, 전체 테이블 스캔을 수행할 수 있다.
- 조인 방법: 조인 방법은 두 테이블을 결합하는 방법을 타나낸다. 주요 조인 방법으로는 중첩 루프 조인(Nested Loop Join), 정렬 병합 조인(Srot Merge Join), 해시 조인(Hash Join)이 있다.
- 조인 순서: 조인 순서는 여러 테이블을 조인할 때 어떤 순서로 조인할지를 결정한다. 일반적으로 작은 테이블을 먼저 선택하는 것이 비용 면에서 유리할 수 있다.
실행 계획 예제
아래 간단한 조인 쿼리를 통해 실행 계획 생성 과정을 다루어본다.
SELECT * FROM department d JOIN employees e ON d.department_id = e.department_id
1번 조인 순서
- 드라이빙 테이블: departments
- 조인 테이블: employees
- 조인 방법 비용 계산:
- 중첩 루프 조인(NL): 10.5
- 정렬 병합 조인(SM): 7.8
- 해시 조인(HA): 5.2
2번 조인 순서
- 드라이빙 테이블: employees
- 조인 테이블: departments
- 조인 방법 비용 계산:
- 중첩 루프 조인(NL): 12.1
- 정렬 병합 조인(SM): 8.4
- 해시 조인(HA): 5.5
두 조인 순서의 각 조인 방법 비용을 비교한 결과 첫 번째 조인 순서에서 해시 조인이 가장 낮은 비용을 가지므로 이 계획이 선택된다.
결론
이번 글에서는 실행 계획 생성기가 어떻게 다양한 실행 계획을 생성하고 각 계획의 비용을 계산하여 최적의 실행 계획을 선택하는지 다루어보았다. 실행 계획 생성기의 역할과 주요 개념을 이해하는 것은 성능 튜닝에 있어 매우 중요하다.
감상
슬슬 오라클을 설치해야겠다. 이래저래 미루고 있었지만 실습을 위해서는 미룰 수 없을 듯하다. 그런데 저번에 오라클 설치하기 위해서 홈페이지에 들어갔더니 구버전 다운로드 클라우드가 어떻게 된 건지 접속이 되질 않았다. 막아놓은 건가 싶기도 하고. 안 되면 최신 오라클을 설치해보겠지만 버전이 맞지 않으면 찝찝한 게 편하지만은 않다.
..라고 글을 쓰고 오라클 홈페이지에 들어가니까 잘만 들어가진다. 이제 받아서 설치해봐야겠다.