- SQL은 구조적, 선언적 언어라 결과집합을 얻기위해 어떤 절차로 명령을 수행할지가 아닌 필요한 명령어(SELECT, FROM, WHERE 등)만 선언하여 명령을 수행
- 때문에 어떻게 데이터를 찾아와야할지(인덱스를 탐색할지 or 테이블을 풀스캔할지) 처리방법(절차)를 기술하지 않음 [힌트작성 우선 예외]
- 왼쪽 SQL구문은 수험번호 조건을 통해 수험생 정보를 가져오라고만 기술할 뿐, 처리방법(절차)에 관한 명령은 없음
- 그렇다면 인덱스 or 풀스캔 에 관한 처리방법은 누가 정하고 결과집합은 어느 절차에 따라 처리될까?
옵티마이저(Optimizer) [=Parser]
- 일반적으로 사용자가 작성한 SQL 쿼리는 옵티마이저가 만든 절차에 따라 수행됨
- 옵티마이저(=Parser)가 유저 프로세스로부터 요청받은 쿼리를 분석하고(Parsing) 실행계획[=처리방법]이라고 하는 Plan을 생성해줌
- 덕분에 SQL 쿼리를 작성하는 유저는 별도의 처리방법을 기술하지 않고도 원하는 데이터를 효율적으로 찾을 수 있음
SQL 파싱(Pasing)
- 유저가 쿼리문을 실행시키면 DBMS가 요청받은 쿼리를 실행시키기 위해 하는 행위
- 문법 체크(Syntax Check), 의미&권한 체크(Symantic Check) 과정을 거쳐 *파싱트리 생성
- 유저 프로세스가 SQL 문을 입력하고 실행을 요청하면, 서버 프로세스가 이를 전달받아 내부적으로 다음 과정을 수행한다.
- SQL문법에 대해 명령어 오류나 오타가 있는지 확인
- 쿼리문에 입력한 테이블명과 컬럼명은 데이터베이스에 존재하는지, 해당 테이블을 읽을 수 있는 권한은 있는지 딕셔너리 캐시를 통해 확인
- 비용 기반 옵티마이저(Cost-Based Optimizer)가 통계 정보, 인덱스 상태, 힌트 등을 바탕으로 실행 경로를 여러 가지로 시뮬레이션한다. 각 경로의 비용(Cost)를 추정하고, 비용이 가장 낮은 실행계획을 선택한다.
- 동일한 SQL 문이 이미 라이브러리 캐시에 존재하면 소프트 파싱을 통해 이전 실행계획을 재사용한다. 해당 SQL 문이 처음 수행되면, 하드 파싱을 거쳐 새로운 실행계획을 생성하고 라이브러리 캐시에 저장한다.
요약하자면...
'1-1. SQL 파싱(Parsing) - 인스턴스 환경편'과 같이 읽으시오
'오라클 개념과 이론 > 필수 기초' 카테고리의 다른 글
1-2. 데이터 저장 구조 (0) | 2025.02.15 |
---|---|
3-1. DB 테이블 설계 - 정규화 (0) | 2024.06.15 |
2-1. PL/SQL 기본개념 (0) | 2024.03.25 |
1-1. SQL 파싱(Parsing) - 인스턴스 환경편 (0) | 2023.10.04 |
1-0. 트랜잭션, 세션, 프로세스 3개는 알아야지 (1) | 2023.10.04 |