Database/ORACLE

DML 문장 / SELECT 문장 실행순서 (약간 이상)

99iberty 2014. 2. 5. 11:36

 

http://muylucir.tistory.com/32

DML 문장

DML문장의 실행순서 - Update문

1. Parse 단계

server process는 전달받은 SQL문장을 SQL Parser에게 전달하여 Parse Tree를 생성한다. 이 과정에서 예약어들의 스펠링을 확인 하는 Syntax Check를 하고 Syntax Check가 완료되면 해당 테이블과 컬럼등의 의미검사를 하는 Semantic Check를 수행한다. Semantic Check가 완료되면 해당 오브젝트들에 대한 권한검사를 수행한다. 이 과정이 모두 끝나게되면 Shared Pool의 Library Cache에서 같은 SQL문장이 있는지를 확인한다. 만약 같은 SQL문장을 찾을 경우 이전에 세워진 실행계획을 토대로 실행되게 된다. 이 과정을 Soft Parse라고 한다. 만약 Shared Pool의 Library Cache에서 동일한 SQL문을 찾지 못했다면 새로운 실행계획 작성을 위해 관련정보를 Optimizer에게 전달하게 된다. Optimizer는 Data Dcitionary를 참고하여 실행계획을 새로 작성하게 되며 이를 Hard Parse라고 한다.

2. Execute 단계

Optimizer가 세운 실행계획을 토데로 필요한 테이블을 디스크에서 가져오게 되는데 디스크에서 I/O를 하기전에 우선적으로 DB Buffer Cache에 해당되는 테이블 있는지 검색을 하게 된다. 이 과정을 Execute라고 한다. 만약 DB Buffer Cache에 해당 테이블이 존재하지 않는다면 디스크에서 해당 테이블을 찾아
DB Buffer Cache로 복사한다. 변경되는 내용에 대한 Change Vcetor를 PGA에서 생성한 후 Redo Loog Buffer에 기록한 후 Undo Segment에 변경전 데이터를 기록한다. 이후 DB Buffer Cache에서 해당데이터를 변경합니다.

Redo Log Buffer에 변경될 내용기록 -> Undo Segment에 원본데이터 기록 -> DB Buffer Cache에 해당 데이터 변경

 

 

http://muylucir.tistory.com/entry/SQL-select문장의-구동원리

 

SQL select문장의 구동원리

사용자가 실행할 SQL문장을 user process에게 전달하면 user processe는 이를 server process에게 전달하여 실행한다.

1. Parse 단계

server process는 전달받은 SQL문장을 SQL Parser에게 전달하여 Parse Tree를 생성한다. 이 과정에서 예약어들의 스펠링을 확인 하는 Syntax Check를 하고 Syntax Check가 완료되면 해당 테이블과 컬럼등의 의미검사를 하는 Semantic Check를 수행한다. Semantic Check가 완료되면 해당 오브젝트들에 대한 권한검사를 수행한다. 이 과정이 모두 끝나게되면 Shared Pool의 Library Cache에서 같은 SQL문장이 있는지를 확인한다. 만약 같은 SQL문장을 찾을 경우 이전에 세워진 실행계획을 토대로 실행되게 된다. 이 과정을 Soft Parse라고 한다. 만약 Shared Pool의 Library Cache에서 동일한 SQL문을 찾지 못했다면 새로운 실행계획 작성을 위해 관련정보를 Optimizer에게 전달하게 된다. Optimizer는 Data Dcitionary를 참고하여 실행계획을 새로 작성하게 되며 이를 Hard Parse라고 한다.

2. Execute 단계

Optimizer가 세운 실행계획을 토데로 필요한 테이블을 디스크에서 가져오게 되는데 디스크에서 I/O를 하기전에 우선적으로 DB Buffer Cache에 해당되는 테이블 있는지 검색을 하게 된다. 이 과정을 Execute라고 한다. 만약 DB Buffer Cache에 해당 테이블이 존재하지 않는다면 디스크에서 해당 테이블을 찾아
DB Buffer Cache로 복사한다. 변경되는 내용에 대한 Change Vcetor를 PGA에서 생성한 후 Redo Loog Buffer에 기록한 후 Undo Segment에 변경전 데이터를 기록한다. 이후 DB Buffer Cache에서 해당데이터를 변경합니다.

3. Fetch 단계

Execute단계에서 메모리로 복사되어진 데이터 들은 블럭단위로 I/O되기 때문에 SQL문에서 선택한 특정 데이터가 아닌 그 데이터가 포함된 블럭을 통째로 복사하게 된다. 때문에 해당 블럭에서 필요한 정보만을 골라내어 최종적으로 사용자에게 전달하는 과정을 Fetch라고 한다.

'Database > ORACLE' 카테고리의 다른 글

[스크랩] Oracle Log 확인  (0) 2014.03.14
[스크랩] SQL문 처리과정  (0) 2014.03.03
16장.  (0) 2013.12.06
15장. 데이터베이스 백업 수행  (0) 2013.12.06
14장. 백업 및 Recovery  (0) 2013.12.06