본문 바로가기
Algorithm/DataBase

옵티마이저 란?

by 광진구뚝배기 2022. 1. 25.

시작하는 말

 

회사에서 업무를 하면서 한 업체에서 문의가 왔다. DB 툴에서 쿼리문을 수행했을 땐 정상적으로 빠르게 데이터를 가지고 오는데 was서버 화면단에서 서비스 조회 시 2분가량의 로딩 이슈 문의였다.

우리 측 서버 문제가 아닌, db query의 효율 문제이다. 같은 쿼리 문이더라도 디비 툴에서는 자체적인 옵티마이저가 실행되어 빠르게 된 것이다. 오늘은 그 개념인 옵티마이저를 설명해보겠다.

 

* 혼자 공부하기 위해 워드에 작성해둔 내용으로 추후에 블로그에 맞게 수정하겠습니다. *

 

 

 

 

옵티마이저

 

 

옵티마이저 란 ?

 

개발자가 sql을 작성하여 실행하면, 소프트웨어의 실행파일처럼 즉시 실행 되는 것이 아니라, 옵티마이저는 이 쿼리문을 어떤 방법으로 실행시킬지 여러가지 실행계획(explain plan)을 세운다.

 

동일한 결과로 출력되는 sql도 실행하는 방법에 따라 성능이 달라지기 때문에, sql 성능에 있어 옵티마이저는 아주 중요한 역할을 한다.

 

 

옵티마이저 특징 ?

 

RBO규칙기반 옵티마이저(Rule Based Optimizer)

실행속도가 빠른 순으로 규칙을 세워두고 우선순위가 앞서는 방법을 채택

단점ex ) 테이블에 데이터가 몇 개 없을 경우, 전체조회를 할 때 full table scan 이 더 빠름에도

불구하고 index를 확인하고 타는 등 비효율적인 실행계획이 도출 될 수 있다.

 

CBO 비용기반 옵티마이저(Cost Based Optimizer)

RBO의 무조건적인 규칙에 따른 비현실성 실행의 단점을 극복하기 위해 만들어진 것으로,

실행계획을 최대 2천개까지 세운 뒤 비용이 최소한으로 나온 실행 계획을 수행한다.

여기서 비용이란, 쿼리 수행 시 소요 일 량, 시간을 의미한다.

 

 

옵티마이저의 실행 방법 ?

 

1.     Sql 을 실행하면 파싱하여 sql의 문법 검사 및 구문 분석

2.     옵티마이저가 규칙 기반 혹은 비용 기반으로 실행계획 수립

3.     최종적으로 sql문 실행 후 데이터 인출(Fetch)

 

 

우선순위           설명

      1          ROWID를 사용한 단일 행인 경우

      2          클러스터 조인에 의한 단일 행인 경우

      3          유일하거나 기본키(Primary Key)를 가진 해시 클러스터 키에 의한 단일 행인 경우

      4          유일하거나 기본키(Primary Key)에 의한 단일 행인 경우

      5          클러스터 조인인 경우

      6          해시 클러스터 조인인 경우

      7          인덱스 클러스터 키인 경우

      8          복합 칼럼 인덱스인 경우

      9          단일 칼럼 인덱스인 경우

      10        인덱스가 구성된 칼럼에서 제한된 범위를 검색하는 경우

      11        인덱스가 구성된 칼럼에서 무제한 범위를 검색하는 경우

      12        정렬-병합(Sort-Merge) 조인인 경우

      13        인덱스가 구성된 칼럼에서 MAX 혹은 MIN을 구하는 경우

      14        인덱스가 구성된 칼럼에서 ORDER BY를 실행하는 경우

      15        전체 테이블을 스캔(FULL TABLE SCAN)하는 경우

 

 

 

 

참고자료

 

- 정보처리기사

- https://velog.io/@yewon-july/Optimizer

 

 

실행계획(Explain plan) 이 궁굼하다면 ? "실행계획(Explain plan) 그것이 알고싶다.  << 클릭

 

반응형

댓글