오라클 처리과정은 어떻게될까? 알아봤다
오라클 SQL 처리과정(SQL Processing)
1. SQL Statement
SQL 쿼리문장을 뜻한다. 예를 들어서 고객정보 화면에서 주민번호나, 고객번호를 입력 후 조회 버튼을 눌렀을 때 해당 쿼리가 DB서버로 고객정보 데이터를 요청하는 SQL을 뜻한다.
SELECT *
FROM 고객
WHERE 고객번호 = '48382' OR 주민번호 = '1234561234567';
2. 파싱(Parsing) 작업
Application에서 SQL문을 발행 후, SQL을 실행 전 Parse Call(구문분석 호출)을 한다.
파싱을 세분화 하면 세가지로 나뉜다
2-1. 파싱 트리 생성와 Syntax Check
파싱트리는 SQL 각 개별 구성요소를 분석해 파싱트리를 생성하는 작업( [SELECT,FROM, WHERE ....] 아마 이거인듯?)), Syntax Check는 SQL 문법을 체크한다. 예를들어 아래와 같은 오타로 문법 오류가 난 상태를 검사한다.
-- 정상
select * from dual;
-- Syntax 위반
seletc * form dual;
2-2. Semantic Check
테이블과 컬럼 등 존재하는지 등에 대한 검사
2-3. Shared Pool Check
공유 풀 확인작업이다. 이 때 hard Parse작업인지, soft Parse작업인지 나뉜다. 공유풀 내부의 라이브러리 캐시가 존재하는데, SQL쿼리문을 요청할 때 가장먼저 라이브러리 캐시에 존재하는지 확인한다. SQL이 캐시에 존재하면 바로 실행하고, 아니면 SQL Processing처리과정 작업을 다시 한다( 이 작업을 최적화 단계라고도 한다)
V$SQL이라는 딕셔너리 뷰에서 확인이 가능하다.
3. 최적화(Optimization)
SQL 최적화는 SQL문을 실행하는 가장 효율적인 방법을 선택하는 전반적인 처리과정이다.
옵티마이저가 수행한다. 참고로 비용기반옵티마이저를 사용한다.
4. 로우소스생성(Row Source Generation)
옵티마이저로 부터 최적의 실행계획을 수신하고, 나머지 데이터베이스에서 사용할 수 있는 쿼리 계획 이라는 반복 계획을 생성한다. 여기서 반복 계획은 SQL 가상 머신에서 실행될 때 결과 집합을 생성하는 이진 프로그램이다. 또한 로우소스생성기는 로우 소스 트리를 생성하는데 작성한 SQL에 대한 실행계획은 로우소스 생성기의 OUTPUT결과물인것 같다.
대충 뭐.. Auto Trace활성상태로 플랜을 볼 수 있는데, 아래 실행계획을 로우소스생성기가 처리해 볼수 있다는 말 같다
SQL> SELECT * FROM EMP WHERE SAL>= 2000;
Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10 | 390 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| EMP | 10 | 390 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
솔직히 무슨말인지 이해하기 어렵다. 그냥 옵티마이저가 선택한 실행경로를 실행가능한 코드 OR 프로시저 형태로 포매팅하는 단계라고 이해하자...
5. 실행(Execution)
로우소스 생성기에 의해서 만들어진 트리의 각 로우 소스를 실행하는 작업이다.
아래 트리(실행계획 도식화)를 보면 4번단계 인덱스로 범위 스캔 후 , rowid로 3번 테이블 액세스로 나머지 필요한 정보를 가져오고, 5번 jobs테이블 액세스 후 3번 집합과 5번 집합을 해쉬 조인 처리 후, 6번 Departments테이블 테이블 액세스 후 2번에서 해시 조인 처리한 집합과 6번 집합을 다시 해시 조인한다는 트리 (실행 계획)이다.
해당 실행 계획으로 진행하는 것을 실행 단계라 하는 것같다.
'🐍ORACLE' 카테고리의 다른 글
오라클 계층쿼리 start with connect by로 계층 구조를 알아보자 (1) | 2023.06.04 |
---|---|
도커Docker - 오라클19c 띄우기 디비버 접속하기 (1) | 2023.05.16 |