2009년 1월 9일 금요일

Oracle SQL Statements

알티베이스가 오라클 지향적이기 때문에 우선 오라클 쿼리 프로세싱 기본 원리에 대해서 알아보자..
(아주 간단히 ;;) 오라클 9i 기준..

DML Statement

1. Parse
 - Parse 는 쿼리를 해석하는 부분으로써 쿼리의 오류 및 실행 계획을 수립하는 단계이다.

   1) Shared Pool 안에 library cache 에서 동인한 문장이 있는지 확인한다.
       - 메모리에 존재한다면 Hit 없다면 Miss 처리된다. (Case Sensitive 고려)

   2) Syntex 를 검사한다. 여기서는 object 유무(Table) 및 권한 을 확인한다.

   3) 해당 object 에 대해서 Lock 을 건다.

   4) 실행 계획을 수립한다.

     - 실행 계획은 크게 RBO  / CBO 로 나뉘는데 ,
     - RBO 는 오라클 8 이하 버전에서 쓰였던 방식으로 이미 실행 쿼리 규칙들이 커널에 코딩되어 있다.
     - CBO 는 오라클 9 이상 버전에서 쓰이며, 실제 이용된 데이터에서 얻은 통계를 이용 쿼리를 최적화 시키며,
      가장 낮은 Cost 를 가지는 쿼리 계획이 사용된다. ( 구체적인 내용은 다음에 ..)

   5) Bind

   6) Execute
     - 질의를 수행한다.

       1) 만일 해당 데이터와 undo 블럭이 Database Buffer Cache 에 존재하지 않는다면,
           서버 프로세스는 데이터 파일 (Disk) 로 부터 읽여 들여 Database Buffer Cache 에 올린다.
       2) 서버 프로세스는 수정될 Row 에 대해서는 lock 을 건다.
       3) 이때 Undo 불럭은 이전 이미지를 가지고 있으므로 필요시에는 Undo 블럭을 이용하여 rollback 한다.
       4) 새로운 데이터를 입력한다.
       5) 이때 서버 프로세스는 Undo 블럭에 이전 이미지를 저장하고, 데이터블럭을 업데이트한다.
       6) 이 두개의 변경된 블럭은 dirty buffer 로 체크 된다.
       7) dirty 로 체크된 블럭은 Disk 와 내용이 다르다.


   7) Fetch
     - 유저 프로세스에게 결과를 리턴한다.

댓글 없음:

댓글 쓰기