DATA 전문가로 가는 길

[Admin][Oracle] SELECT, UPDATE, COMMIT 실행되는 과정 본문

Data Architecture/Admin

[Admin][Oracle] SELECT, UPDATE, COMMIT 실행되는 과정

EstenPark 2011. 4. 17. 23:51
 
작성자 : 박상수
작성일자 : 2011.04.17
작업환경 : VMware7 [ Solaris 10, Oracle Database 10g r2 patchset 4 ]


1. SELECT 문장의 실행 과정
1-1 SELECT * FROM 

  • Parse -> Bind -> Execute -> Fetch
  • User Process는 사용자가 실행한 SQL을 가지고 DB 서버에 접속하여 리스너를 통해서 Server Process에게 쿼리를 전달 합니다. 이후 Server Process는 각 단계별로 작업을 시작 합니다. 우선 Shared Pool에서 구문분석, 문법검사, 권한검사, 커서공유, 실행계획을 진행 합니다. 이러한 단계를 오라클에서는 Parse라고 합니다. Bind는 값을 치환하여 변수 값을 적용 하며 만약 바인드 처리를 하지 않았다면 바로 실행 단계로 넘어 갑니다. Execute는 Database Buffer Cache에서 데이터파일에 필요한 블록을 적재하거나 만약 데이터가 Database Buffer Cache에 있다면 재사용 하게 됩니다. 최종적으로 Fetch는 필요한 데이터만 골라서 User Process에서 전달합니다.

 


2. UPDATE 문장의 실행 과정
1-1 UPDATE DEPT SET name='sang' WHERE deptno='1234' 

  • Parse -> Bind -> Execute
  • User Process는 사용자가 실행한 SQL을 가지고 DB 서버에 접속하여 리스너를 통해서 Server Process에게 쿼리를 전달 합니다. 이후 Server Process는 각 단계별로 작업을 시작 합니다. 우선 Shared Pool에서 구문분석, 문법검사, 권한검사, 커서공유, 실행계획을 진행 합니다. 이러한 단계를 오라클에서는 Parse라고 합니다. Bind는 값을 치환하여 변수 값을 적용 하며 만약 바인드 처리를 하지 않았다면 바로 실행 단계로 넘어 갑니다. Execute 단계는 아래에서 설명 하겠습니다.
  • Select 문장과 달리 fetch 단계가 없고 Execute 단계에서 종료가 됩니다. 하지만 Execute 단계는 Select 문장과 조금 다르게 동작 합니다. 사용자가 update 쿼리를 실행하며 서버 프로세스가 우선 가장 먼저 사용 가능한 undo segment부터 확보하게 됩니다. 변경을 된 내용을 리두 로그 버퍼에 기록하고 이전 데이터를 undo segment에 기록 합니다. 마지막으로 DB Buffer Cache에 변경된 내용을 기록 하게 됩니다.



3. COMMIT의 실행 과정
1-1 Commit 

  • 보통 commit를 수행하면 데이터 파일로 저장한다고 생각 하는 분들이 많지만 정확한 표현은 커밋을 수행하면 리두 로그 버퍼에 존재하는 변경에 대한 로그를 리두 로그 파일에 기록하게 됩니다. 이는 빠른 커밋의 아키텍처와 지연 쓰기에 의해 실제 데이터 버퍼 캐쉬에 존재하는 변경된 데이터를 디스크에 저장하지는 않습니다.



Comments