OPTIMIZER - OVERVIEW
OVERVIEW SQL PROCESSING
SQL 프로세싱은 SQL문을 실행하기 위해 다음과 같은 절차를 따릅니다.
- 분석자(PARSER)는 SQL문을 분석합니다. (PARSING)
- 옵티마이저는 비용기반의 옵티마이저 (COST BASED OPTIMIZER, CBO) 혹은 규칙기반의 옵티마이저 (RULE-BASED OPTIMIZER, RBO)중 최고의 효율을 보여주는 방법중 하나를 선택합니다.
- RSG(Row Source Generator)는 옵티마이저에게 최적화된 계획을 받고 SQL 실행을 위한 최적화된 실행 계획을 출력합니다.
- SQL 실행 엔진(SQL Execution Engine)은 SQL문을 실행계획에 따라 실행하고 쿼리의 결과를 생산합니다.
<Picture : SQL Processing Overview : www.oracle.com>
OVERVIEW OF THE OPTIMIZER
옵티마이저는 SQL 문에 있는 특정한 조건과 참조되는 오브젝트들에 대한 요소들을 분석하고 SQL 문을 가장 효율적으로 수행할 수 있는 방법을 선택합니다. 이러한 선택은 SQL을 실행하는 과정에서 굉장히 중요한 부분이며, SQL을 실항하는 시간에 지대한 영향을 끼칩니다.
SQL은 다음과 같은 여러가지 방법으로 수행될 수 있습니다.
- Full table scans
- Index scans
- Nested loops
- Hash joins
옵티마저에서 생성한 출력물은 쿼리 수행에 있어 가장 최적화된 방법을 설명합니다. 오라클 서버는 비용기반(Cost-based)과 규칙기반(Rule-based)의 최적화 방식을 제공합니다. 일반적으로 최종 목표 데이터에 접근하는데는 비용기반 방식이 사용됩니다.
사용자는 옵티마이저를 세팅하거나 STATISTICS를 수집하여 데이터에 접근하는 방법을 조절할 수 있습니다.
떄떄로 어플리케이션의 데이터에 대한 충분한 정보를 가지고 있는 어플리케이션 디자이너들은 SQL 문을 수행하는데 좀더 효과적인 경로를 직접 선택할 수 있습니다. 어플리케이션 디자이너는 SQL 문에 HINT 절을 이용하여 그 SQL문이 수행하는데 필요한 정보를 제공할 수 있습니다.
FEATURES THAT REQUIRE THE CBO
다음은 CBO(Cost-Base Optimze)를 수행하는데 필요한 조건들 입니다.
- Partitioned Table and Index
- IOT (Index Organized Table)
- Reverse Key Index
- Function-based Index
- SAMPLE clause in a SELECT statement
- Parallel query and parallel DML
- Star transformations and star joins
- Extensible Optimizer
- Query rewirte with materialized views
- Enterprise Manager progress meter
- Hash Joins
- Bitmap indexes and bitmap join indexes
- Index skip scans
OPTIMIZER_MODE 가 RULE로 되어 있다고 해도 위 사항중 하나라도 해당이 되면 CBO로 실행이 됩니다.
OPTIMIZER OPERATIONS
오라클에 의해 수행되는 모든 SQL문은 옵티마이저에 의해 다음을 수행 합니다.
Evaluation of expressions and conditions
옵티마이저는 첫째로 가능한한 모든 조건들과 값들을 평가합니다.
Statements transformation
복잡한 구문을 포함한 쿼리 - 서브쿼리 혹은 뷰 (예) - 들은 Join 을 이용한 구문으로 변환합니다.
Choice of optimizer approches
옵티마이저는 CBO와 RBO 중 하나를 선택하고 최적화 목표를 결정합니다.
Choice of access path
옵티마이저는 테이블 데이터를 얻기 위한 하나 혹은 그 이상의 접근 경로를 결정합니다.
Choice of join orders
두 테이블 이상이 결합된 Join 문에서 옵티마이저는 우선 몇개의 테이블을 Join 될 지결정하고,
결과에 몇개의 테이블이 Join 될 지를 결정합니다.
Choice of join methods
어던 구문에서도 Join을 수행하기 위한 동작을 결정합니다.
FIN
REF) Oracle Documents (Server .920)/a96533 "Introduction to the Optimizer"
댓글 없음:
댓글 쓰기