Steady Mind For My Life

https://github.com/jongseok3910/Spring-Study

Oracle

쿼리 처리 원리

함탕 2023. 7. 18. 21:37
728x90
728x90

SQL의분석

SQL은 자바 같은 프로그래밍 언어와 달리 실행하기 전에

문법적인 에러를 검출할 방법이 없다.

(자바는 컴파일 할 때 문법적에러를 검출 할 수 있다)

 

그래서 SQL을 실행하기 전에 분석을 해야한다.

분석작업은 아래와 같고 SELECT문 기준이다.

 

1.공유 풀 확인(SGA영역)

서버 프로세스는 전달받은 SQL과 같은 SQL의 분석 결과가

공유 풀에 존재하는지 확인한다.

 

-하드파싱

a. 공유 풀에 사용 할 만한 분석결과가 있으면

    분석단계를 넘어 SQL실행 단계로 간다.

 

-소프트파싱

b. 공유 풀에 사용 할 만한 분석결과가 없으면

    다음 SQL검증 단계로 진행된다.

 

아주 간단한 설명

홍길동을 구하는 SELECT쿼리를 수행한다.

1.SELECT NAME FROM 수첩 WHERE NAME = '홍길동'

ㄴ 첫 실행은 하드파싱

 

다시 홍길동을 구하는 SELECT쿼리를 수행한다.

2.SELECT NAME FROM 수첩 WHERE NAME = '홍길동' 

ㄴ 두 번째 실행은 소프트파싱(첫 번째 실행의 분석결과가 남아있기 때문)

 

2. SQL검증

서버 프로세스는 전달받은 SQL이 실행 가능한지

아래와 같이 확인한다.

 

1.Syntax 체크

   문법적 오류가 없는지 확인, 예를 들어 순서가 바르지 않거나

   누락된 키워드 확인.

 

2.Semantic 체크

   의미상 오류가 없는지 확인, 예를 들어 존재하지 않는 테이블 or 컬럼 사용

   오브젝트에 대한 권한 있는지 확인

 

a. SQL에 문제없으면 실행계획생성으로 넘어간다.

 

b, SQL에 문제있으면 에러를 회신하고 종료된다.(실행X)

ㄴ ex: Syntax Error

 

3. 실행계획생성(옵티마이저)

검증이 끝난 SQL문을 옵티마이저가 미리 수집한 시스템 및 오브젝트

통계정보를 바탕으로 다양한 실행경로를 생성해서 비교한 후

가장 효율적인 하나를 선택한다.

 

옵티마이저는 간단히 설명하자면 자동차의 네비게이션 같은 것이다.

작성된 SQL문이 빨리 실행 될 수 있도록 최적의 경로를 찾아준다.

 

하지만 옵티마이저가 선택한 경로가 항상 옳은 것은 아니다.

그래서 쿼리튜닝을 하는 일이 생긴다.

(네비게이션이 안내 해 준 경로보다 내가 알고 있는 지름길로 가는게 더 빠르듯이^^)

 

4. 로우 취득

옵티마이저가 생성 한 실행 계획으로 실행되면

데이터베이스 버퍼캐시의 블록에서 로우를 가져오고

본인이 원하는 데이터를 받아 볼 수 있다.

 

*데이터베이스 버퍼캐시

ㄴSGA의 영역에 있고,  쿼리가 수행 되면 버퍼캐시를 통해 데이터파일에서 

   데이터를 가지고 온다.(쉽게 설명하면 인터페이스 같은 느낌이랄까?)

 

 

728x90
300x250

'Oracle' 카테고리의 다른 글

REDO 로그 파일 & REDO 데이터(1)  (0) 2023.10.15
오라클의 메모리 관리(PGA & SGA)  (0) 2023.10.03
데이터베이스와 인스턴스(2)  (2) 2023.08.27
데이터베이스와 인스턴스(1)  (0) 2023.08.17
인덱스  (0) 2023.07.31