티스토리 뷰

SQL 문장 실행 원리


SQL 문장 실행 원리 

3. SHARED POOL의 LIBRARY CACHE 검사해서 실행계획 있는지 확인후 있으면 7번으로~

5. 여러개의 실행계획을 OPTIMIZER가 만들면 RAW SOURCE GENERATOR 에게 보낸후

RSG가 가장 좋은것을 선택한다. 그리고 서버프로세스에게 주면 그것을 LIBRARY CACHE에

등록한 후 PGA로 복사해서 가져온 후 6번으로 넘어간다.



셀렉트 문장이 수행되는 4단계의 순서는 

PARSE(구문분석)-> BIND(값치환) -> EXECUTE(실행) -> FETCH (인출)이다.


PARSE(구문분석)은 SQL문장 실행시 서버프로세스는 유저 프로세스에게 SQL문장을

전달받고 SQL PARSER을 통해서 문장에 쓰인 키워드, 컬럼명 등을 분석해서 PARSE TREE

를 생성하게 된다. 키워드 분석은 SYNTAX CHECK 이라고 하고 컬럼명& 테이블명 분석은

SEMANTIC CHECK 이라고 한다. SYNTAX CHECK과 SEMANTIC CHECK은 SHARED POOL

안에 있는 DICTIONARY CACHE(ROW CAHCE)를 사용한다. 이상없으면 SQL 문장을

ASC2(숫자값) 변경후 HASH 함수를 통에 HASH값으로 변경한다. 그리고 커서공유 또는

SOFT PARSE(HASH VALUE를 SHARED POOL의 LIBRARY CACHE에 있는 HASH VALUE

들과 비교해서 동일한 값있는지 확인한다). 사용자가 다르면 문장도 다르게 된다.


SOFT PARSE란 LIBRARY CACHE안에 있는 한번 수행되었던 SQL 문장의 실행계획과 

관련정보를 보관하고 있는 공유커서 (커서랑 어떤 데이터를 저장하기 위해 만드는 임시

저장공간)을 재활용해서 실행걔획을 찾게 되므로 SQL의 수행 속도를 향상시킨다.

단 커서공유는 PARENT CURSOR (SQL문장값)와 CHILD CURSOR(사용자 정보값, 

OPTIMIZER MODE)이 동일해야 이루어진다. 결국 사용자가 다르면 CHILD CURSOR가 

다르므로 커서 공유를 사용할수 없게 된다. 이렇게 SOFT PARSE가 실패하면 

HARD PARSE를 하게된다. 


HARD PARSE는 실행계획을 세워주는 OPTIMIZER가 

DATA DICTIONARY(DBA_TABLES, USER_TABLES)를 참고해서 어떤 테이블을 먼저 

사용할지 어떤 인덱스를 사용할지 결정하게 된다. 쿼리를 수행하면 서버프로세스가 

쿼리를 받은후 SHARED POOL 메모리 공간을 사용해서 SQL 실행계획을 세우는데 

이때 참조하는 STATIC DATA DICTIONARY 와 10g 이후 추가된 자동으로 딕셔너리 

정보를 모아주고 관리 해주는 기술이 생기긴 했지만 사람이 수동으로 최신 정보를 

업데이트 및 관리를 해주어야 한다.


BIND(값 치환) 은 여러개의 데이터를 조회하려고 할때 실행계획이 같을 경우, 즉

같은 테이블의 같은 칼럼을 조회하는 것이 라면 조회갯수 만큼의 실행계획과 파싱 횟수

보다 1번의 파싱으로 1개의 실행계획과 값만 치환해주면 훨씬 부담이 적고 쿼리 수행

속도가 빨라진다. 치환되는 값은 바인드 변수값이라고 한다. 

테이블에 데이터들이 SKEWED(편중)되어 있으면 인덱스가 정상적으로 작동하지 

않으므로, 이럴경우 특수통계정보인 HISTOGRAM 을 생성필요, 그러나 HISTOGRAM을

사용하면 BIND를 사용하지 못한다.

BIND 는 HARD PARSE성능과 관련이 있다.


EXECUTE(실행)은 서버프로세스가 먼저 찾는 블록의 주소를 HASH함수에 넣어서

HASH VALUE를 만들고 DBC에 동일한 HASH VALUE가 있는지 블록을 찾게 된다.

없으면 하드디스크에가서 해당 블록을 DBC로 복사해온다. DBC로 해당 블록 복사해오는

과정을EXECUTE라고 한다.

EXECUTE과정에서 인덱스가 없으면 서버프로세스는 블록을 찾는 시간이 지연되고a

USER PROCESS가 데이터를 받기위해 기다리는 시간도 지연된다.


FETCH(인출)은 EXECUTE된 입출력 최소 단위인 블록에서 원하는 데이터를 골라내는 

과정이다. 정렬등 추가 작업이 요청되면 PGA에서 정렬을 완료해서 FETCH를 완료한다.

'ORACLE DB > Oracle DB Admin' 카테고리의 다른 글

CHECKPOINT  (0) 2013.03.11
COMMIT PARAMETER  (0) 2013.03.11
UPDATA 실행 원리  (0) 2013.03.11
ORACLE BACKGROUND PROCESS  (0) 2013.03.11
ORACLE 시작, 단계별 INSTANCE OPEN  (0) 2013.03.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함