[오라클SQL실행처리순서]SQL문장(SELECT)의 처리과정(파싱, 옵티마이저, FETCH, 실행, Library Cache, Parse-Tree, Query Transformer, Estimator, Plan Generator)
사용자가 SQL문장(select)을 실행
- 오라클 서버측 리스너가 서버 프로세스로 SQL문장을 전달
SQL 파싱
- 서버프로세스는 Shared Pool의 Library Cache를 조회해서 동일한 SQL문장이 있는지 확인하는데 문자 하나하나 공백, 대소문자까지 비교하여 이미 있다면 Library Cache의 parse-tree와 Query Execution Plan을 가지고 와서 실행한다. 이를 Soft Parsing 이라하고
없다면 먼저 사용자 SQL 문장의 문법체크(Syntax Check)를 우선 진행하고, 데이블 및 컬럼이 있는지, 해당 USER가 데이블 및 컬럼을 SELECT할 권한이 있는지(Semantic Check)를 Data Dictionary를 통해 체크하는데 이후 parse-tree를 만들고 나중을 위해 Library Cache에 저장한다.
Syntax, Semantic 체크를 모두 통과하였다면 이 SQL 구문은 오류가 없는 문장이 되며 해당 문장에 해싱 알고리즘을 적용하여, SQL커서가 메모리상에 존재하고 있는지를 체크한다. SQL구문을 보낸 사용자나 옵티마이저 MODE관련 설정까지 일치하는 SQL커서가 존재하고 있다면 더이상 추가 작업 없이 그 SQL 정보를 이용하게되며 이를 소프트 파싱이라 부른다
- SQL커서가 없다면 Parsing된 SQL문장(쿼리 블럭의 set)을 Optimizer(Query Transformer, Estimator, Plan Generator)로 전달
SQL 최적화 - Optimizer
- Query Transformer : 쿼리블록으로 나누어 변형된 몇 종류의 쿼리문을 생산,
서브쿼리를 조인으로 변경한다든지, 뷰의 해체작업, 인라인뷰의 해체작업,
FROM절의 테이블제거작업등을 거쳐 쿼리를 변형한다.
- Estimator : 주어진 SQL문장의 모든 Cost를 측정한다. Selectivity(선택도) , Cardinality, Cost등 세가지 다른 측정방법을 이용하며 최소의 비용을 갖는 SQL문장을 Plan Generator에게 넘긴다.
- Plan Generator : 선택된 저비용 SQL문의 실행계획을 생성하여 Row Source Generator에게 넘긴다. 이렇게 생성한 실행계획도 나중을 위해 Library Cache에 저장해 둔다.
실행(Execution)
- Row Source Generator : 실행계획의 각단계를 실행
DataBase Buffer Cache 영역에서 논리적읽기와 물리적 읽기를 실행
DataBase Buffer Cache에 free영역이 존재하지 않으면 LRU 알고리즘에 의해 공간확보
버퍼캐시에 없다면 디스크의 DataFile을 읽어 데이터 버퍼 캐시에 적재
추출(Fetch)
- 서버 프로세스가 DataBase Buffer Cache에 저장된 데이터를 읽어 User Process에게 결과를 넘겨준다. (DML인 경우에는 수행하지 않는다.)
댓글 없음:
댓글 쓰기