SQL 처리 과정
SQL 수행 절차
!오라클 성능 고도화 원리와 해법1.png!
(1) SQL파싱
- SQL문장을 이루는 개별 구성요소를 분석하고 Parsing 하여 Parsing Tree를 만든다.
- SQL 문법적 오류가 없는지 Syntax 체크를 한다.
- Parsing Tree가 만들어 지고 Semantic 체크를 통해 의미상 오류가 없는지 확인한다.(Object, 권한, 컬럼 등)
- 문법적으로 완전하고 의미상 오류가 없다면 해싱 알고리즘을 이용해 해당 SQL 커서가 Shared Pool에 캐싱되어 있는지를 확인한다.
- Shared Pool에서 찾은 SQL문장이100% 일치하더라도 파싱을 요청한 사용자가 다르거나 옵티마이저 관련 파라미터 설정이 다르다면 새로운 SQL 커서를 생성해야 한다.
(2) SQL 최적화
- 옵티마이저는 시스템 통계 및 오브젝트 통계 정보를 판단기준으로 삼아 다양한 액세스 경로(Access Path)를 비교하고 그 중 가장 효율적인 실행계획을 선택해주는 DBMS의 핵심 엔진이다.
- 옵티마이저가 최적화를 수행할 때 세부적으로 아래 3개의 서브 엔진을 사용한다.
- Query Transformer
- 사용자가 던진 SQL을 그대로 둔 채 최적화하는게 아니라 우선 최적화하기 쉬운 형태로 변환을 시도한다. 쿼리 변환 전후 결과가 동일함이 보장될때만 그렇게 한다.
- Plan Generator
- 하나의 쿼리를 수행하는 데 있어, 후보군이 될만한 실행계획들을 생성해 내는 역할을 한다
- Estimator
- Query Operation 각 단계의 선택도(selectivity), 카디널리티(Cardinality), 비용(Cost)를 계산하고, 궁극적으로는 실행계획 전체에 대한 총 비용을 계산해 낸다. 각 단계를 수행하는데 필요한 I/O, CPU, 메모리 사용량 등을 예측하기 위해 데이터베이스 오브젝트 통계정보와 시스템 통계정보를 이용한다.
- Plan Generator와 Estimator를 수행 시 최적의 실행계획을 선택하기 위해 Query 최적화에 걸리는 시간이 일정 비율을 넘지 않도록 적응적 탐색 전략을 사용(Adaptive Search Strategy)를 사용한다. 두번째는 'Multiple Initial orderings heuristic'으로 조인순서를 무순위로 평가하는게 아니라 최적의 실행계획을 발견할 가능성이 높은 순서대로 비용을 평가하는 방법이다.
(3) Row-Source Generation
- 옵티마이저의 최적화 과정을 거치면 SQL처리과정을 표현한 실행계획이 만들어 진다.
- 이런 실행계획을 실행 가능한 코드 또는 프로시저 형태로 포맷팅하는 작업이 필요하며, 이 역할을 Row-Source Generator가 담당 한다. Row-Source는 레코드 집합을 반복 처리하면서 사용자가 요구한 최종 결과집합을 실제적으로 생성하는데 사용되는 제어 구조를 말한다.