오라클피부과
article thumbnail

- 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) - 인스턴스 환경편'과 같이 읽으시오

profile

오라클피부과

@피부과 코딩네이터

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!