Tuning

Optimizer란?

cororo2 2023. 9. 25. 10:29

1. Optimizer란?

사용자가 질의한 SQL문에 대해 최적의 실행 방법(가장 효율적인 방법)으로 최적의 처리 경로를 결정하는 역할로

DBMS의 핵심 엔진

  • SQL을 작성하고 실행하면 즉시 실행되지 않고 Optimizer에서 쿼리문에 대한 실행계획 생성
    • 실행계획은 Optimizer가 생성한 SQL 처리 경로
  • 여러가지 실행계획 생성 후 시스템 통계 정보를 활용하여 각 실행계획의 비용 산정
  • 각 실행계획을 비교해서 최고의 효율을 가진 실행계획 실행
  • 최적화의 목표는 전체 처리 속도/최초 응답 속도  최적화

RBO(Rule-Based Optimizer)

  • 규칙(우선순위)를 가지고 실행계획 생성(실행속도가 빠른순으로 규칙을 세워둠)
  • Optimizer힌트와 Hash Join 사용 불가

CBO(Cost-Based Optimizer)

  • 비용이 가장 적게 드는 실행계획을 선택
  • Cost = 쿼리 수행시들어가는 일량, 시간의 예상치
  RBO CBO
개념 사전에 정의된 규칙 기반 최소비용 계산 실행계획 수립
기준 RULE COST
인덱스 인덱스 존재시 가장 우선 사용 Cost에 의한 결정
성능  사용자 SQL 작성 숙련도 옵티마이저 예측 성능
장잠 판단이 매우 규칙적으로 실행 예상 가능 통계 정보를 통한 현실 요소 적용

 

2. Optimizer 동작 방식

 

  • Parser : SQL 문장을 분석하여 문법 검사와 구성요소를 파악하고 이를 파싱해서 파싱 트리 생성
  • Query Transformer : 파싱된 SQL문을 보고 같은 결과를 도출하되, 좀 더 나은 실행계획을 갖는 SQL로 변환이 가능한지 판단하여 변환 작업 수행
  • Estimator : 시스템 통계정보를 딕셔너리로부터 수집하여 SQL을 실행할때 소요되는 총비용 계산
  • Plan Generator : Estimator를 통해 계산된 값들을 토대로 후보군이 되는 실행계획 도출
  • Row-Source Generatoe : 옵티마이저가 생성한 실행계획을 SQL엔진이 실제 수행할 수 있는 코드나 프로시저 형태로 포맷팅
  • SQL Engine : SQL 실행