SQL 파싱과 최적화

서동진·2021년 1월 30일
post-thumbnail

SQL 파싱과 최적화

  1. SQL 처리 과정
  • Sql 문 실행 -> Sql Parsing -> Library Cache 확인 (있으면 바로 실행) -> (없으면) 최적화 -> Row Source 생성 -> 실행
세분화 과정
1. SQL 파싱
- 파싱트리 생성 :sql 문을 이루는 개별 구성요소를 분석해서 파싱 틍리 생성

- Syntax 체크: 문법적 오류가 없는지 확인, 사용할 수 없는 키워드를 사용했거나 순서가 바르지 않거나 누락된 키워드가 없는지 확인하는 과정.

- Semantic 체크: 의미상 오루가 없는 지 확인 , 존재하지 않는 테이블 도는 컬럼을 사용했는지, 사용한 오브젝트에 대한 권한이 있는지 확인

- SQL 이 Shared Pool에 캐싱되어 있는지 확인

 * Shared Pool: SGA 영역내 Libray Cache와 Data Dictionary cache 를 포함하는 영역

2. SQL 최적화
- 옵티마이저가 최적화 단계를 맡는다. 
- 옵티마이저가 미리 수집한 시스템 및 오브젝트 통계정보를 바탕으로 다양한 실행 결로를 생성해서 비교한후 가장 효울적인 하나를 선택한다.
- 데이터베이스 성능을 결정하는 가장 핵심적인 엔진이다.

3.로우 소스 생성 
- SQL 옵티마이저가 선택한 실행 경로를 실제 실행 가능한 코드 또는 프로시저 형태로 포매팅 하는 단계이다.
  1. SQL 옵티마이저
  • 사용자로부터 전달받은 쿼리를 수행하는데 후보군이 될만한 실행계획들을 찾아낸다.
  • 데이터 딕셔너리에 미리 수집해둔 오브젝트 통계 및 시스템 통계 정보를 이용해 각 실행 계획의 예상비용을 산정한다.
  • 최저 비용을 나타내는 실행 계획을 선택한다.
  1. 실행계획과 비용
    SQL 옵티마이저는 경로를 검색하고나서 이동경로를 미리 확인하고, 맘에 들지 않으면 검색 모드를 변경하거나, 경유지를 추가해서 원하는 경로를 바꿔주는 역할을 한다.

-> index tas_x01= deptno,no
-> index tas_x02 = deptno, job, no


-> Optimizer가 tas_x01 인덱스를 선택하였다. 그 근거는 무엇일까?

* Index tas_x02를 타게 할 경우

Cost : 쿼리를 수행하는 동안 발생할 것으로 I/O 횟수 또는 예상 소요 시간을 표한한 값.

-> Cost 비용이 인덱스 tas_x01이 더 작은 것을 알 수 있다.

옵티마이저가 비용을 계산해서 비용이 적은 index tas_x01을 타게 했다.

항상 옵티마이저가 최선의 선택을 하는 것이 아님을 알아두자!!

=>
다음시간에는 옵티마이저 앞서 사용한 /+ ~/ 옵티마이저 힌트에 대해 알아 보자

0개의 댓글