반응형

(1) SQL 문장의 실행 원리    


- User Process : 쿼리를 치는 프로그램으로 sqlplus, toad, orange 등이 있다

- Tnsname.ora : 주소록과 같은 개념으로 저장된 정보를 통해 Database를 찾아감 ( IP, PORT, SID 등 저장되있음 )

 Oracle Client 를 설치해야 생김.   netca 명령어를 실행

- Server Process : 실제 작업을 수행하는 역할 , User Process 로부터 쿼리 내용 전달 받아서 D.B에서 찾음

- Connection : 유저 프로세스와 서버 프로세스가 만나서 쿼리 전달받는 것

- Session : 서버 프로세스가 유저 프로세스로부터 쿼리를 전달 받아 D.B에서 작업을 수행하는 것


과정 설명

- 유저 프로세스에서 쿼리를 작성 -> 1. Tnsname.ora 에 저장된 정보를 확인해 리스너로 이동 -> 2. 리스너에서 D.B 에 있는 서버 프로세스를 호출 -> 3,4 서버 프로세스와 유저프로세스가 만나서 쿼리내용 전달 ->  5. 서버프로세스가 D.B로 가서 작업을 수행해서 결과값 출력 


예 ) 유저프로세스 : 면회자 , 리스너 ; 위병 병사  , D.B : 군대  , 서버프로세스 : 당직사관

-> 면회자가 면회할 대상의 정보(쿼리)를 갖고 네비게이션에 주소(Tnsname.ora)를  입력해 군대로 출발 (1번단계) -> 위병소에서 병사(리스너)에게 면회왔다고 면회요청 (2번단계) -> 군대에서 당직에게 면회자 있다고 연락해 호출(3번단계)

-> 당직에게 면회당사자 정보를 전달해줌(connection) (4번단계) -> 당직은 군대에서 면회당사자 정보로 병사찾음 (session)(5번단계) -> 병사 찾아서 면회하러 나감 (출력)


위와 같은 과정을 2번째 부터는 1,2,3 번의 과정을 건너뛰고 Tnsname.ora 에서 바로 Server Process 단계로 가는 A 과정 

-> 5번 과정으로 작업 수행 ( DB로 처음 연결하는게 첫번째라고 행함 )


(2) Select 문장의 실행 원리





 1. Parse

- Server Process 가 User Process 로부터 SQL 문장을 받아서 SQL Parser 를통해 각 SQL문에 쓰인 키워드나 컬럼명등을 분석해 Parse Tree 라는 것을 생성


- Parse Tree를 만드는 과정에서 문법검사등을 하고 이상이 없으면 의미검사를 한다.

-> 문법검사 단계에서 스펠링이 틀리면 Parse Tree 생성단계에서 오류가 생기게 되고

     의미검사 단계에서 잘못되면 Semantic Check 단계에서 에러가 발생


- Dictionary Cache (Row Cache) : 해당 문법이 맞는지 틀린지 여부나 해당 테이블이 있는지 없는지 여부를 알기위해

  데이터 딕셔너리를 사용하게 되고 자주 사용하는 데이터 딕셔너리를 캐싱해 두어

  성능을 높이는 역할을 하는곳


- 실행계획

- 검사단계를 마치고 실행계획단계로 넘어가는데 Shared Pool  Library Cache를 검사해 기존에 사용했던 sql 문장이나 pl/sql 문장이 있으면 soft parse를 실행해 다음단계로 넘어감

- 기존에 사용한적이 없어서 soft parse를 실행하지 못하면 Shared PoolDictionary Cache를 참조하여 실행계획 생성 

- soft parse 를 항상 먼저 실행하고 실패했을 경우에 hard parse를 실행


RBO ( Rule Based Optimizer ) : 서버 프로세스가 실행계획을 세워 달라고 요청이 들어오면 이름대로 미리 정해져 있는                                               규칙을 사용해 실행 계획을 세움 ( 융통성 없는 방식 )

CBO ( Cost Based Optimizer ) : 규칙을 기반으로 실행계획을 세우되 상황에 맞게 계획세움 ( 대부분이 CBO 사용 ) 



2. Bind

- 실행 계획을 1개만 생성 한 후 바인드 변수 값을 바꾸어 여러 번 실행하는 것


3. Execute

- Database Buffer Cache 에서 서버프로세스가 원하는 블록이 있는지 검사

      - 원하는 블록이 없을시 데이터파일에서 서버프로세스가 원하는 블록을 Databse Buffer Cache 로 복사 


4. Fetch

- 복사한 데이터 블록 에서 사용자가 요청한 데이터만 골라내는 과정

>만약 사용자가 정렬(sort) 등의 추가 작업을 요구했을 경우 Fetch 과정에서 sort를 완료한후 PGA 공간으로 데이터 보내서 정렬 발생 ( PGA 공간은 서버 프로세스 별로 각각 독립적으로 할당되어 사용 )



반응형

'오라클 > 관리 실무' 카테고리의 다른 글

Oracle 저장구조  (0) 2014.10.23
Tablespace 와 Data File 관리하기  (2) 2014.10.21
Redo Log 관리하기  (0) 2014.10.20
Control File 관리하기  (0) 2014.10.20
ORACLE 시작하기 & 종료하기  (0) 2014.10.20
Oracle Background Process  (0) 2014.10.17
Oracle Architecture  (2) 2014.10.17

+ Recent posts