본문 바로가기
Language/SQL 튜닝

2장. [옵티마이저] 2-2. SQL 처리 과정

by RUCKUS 2021. 10. 9.

 

이 사진 한장으로 설명 끝이다. 인데 조금 세세하게 들어가보자.

 

1. SQL 파싱

  • SQL 파서(parser) 가 SQL을 가장 먼저 받아서 처리 한다.
  • 하여 가장 기본이 되는 오류들을 먼저 체크한다.
    • Syntax 체크 : 문법적 오류 체크
    • Symantic 체크 : 의미상 오류가 없는지 체크
    • Shared Pool 체크 : 쉐어드 풀에 캐싱되어 있는지 확인

2. SQL 최적화

  • Query Transformer
    • SQL을 최적화하기 쉬운 형태로 변환한다. 예를 들어서 '값 BETWEEN A AND' B 쓰면 '값 >= A AND 값 <= B' 이런식으로 변환하는 것 같다.
  • Plan Generator
    • 다양한 실행계획을 생성한다.
  • Estimator
    • 총 비용을 계산한다.
    • 오브젝트 통계, 시스템 통계를 활용하여 예상치를 산정한다.

3. Row Source 생성

  • 실행엔진이 실행할 수 있는 코드 또는 프로시저 형태로 포맷팅 한다.
  • 레코드 집합을 순차적으로 처리하면서 사용자가 요구한 최종 결과집합을 생성한다.

4. 라이브러리 캐시[Library Cache]

  • 최적화된 SQL과 실행계획을 라이브러리 캐시에 캐싱하는데! 여기서
    • 스프트파싱 -> Shared Pool에서 동일한 SQL과 실행계획이 발견되면 최적화 안하고 바로 수행한다.
    • 하드 파싱 -> Shared Pool에 없으면 최적화를 통해 실행계획을 생성한다.
      • 그래서 쿼리가 일관성 있는 것이 기본적으로 처리 속도를 높이는데 기여한다.
      • 최적화 과정은 Hard하다. CPU를 많이 소비하는 연산작업이기 때문이다.

 

본 글은 작성자가 공부한 것을 기록하기 위하여 작성한 것으로, 100% 정확한 정보가 아닐 수 있습니다. 정정을 요청하셔도 좋고 여러 의견을 주시면 너무너무 환영이고 감사하겠습니다.