티스토리 뷰

DB, Storage/oracle

SQL 수행시 작업

卽興詩人 2013. 12. 1. 20:35

사용자가 sql 문장을 수행요청하면 오라클은 메모리 영역과 래치를 이용해 필요한 작업을 수행하게 된다

사용자가 새로운 sql 문장을 수행요청하면 오라클은 기본적인 문법체크와 권한체크등을 수행한 후 해시버킷을 관리하는 library cache 래치를 획득하고 library cache 영역에 동일한 sql 문장 즉 동일한 LCO 가 존재하는지 확인한다

library cache 래치를 획득하는 과정에서 경합이 발생하면 latch : library cache 이벤트를 대기한다

동일한  LCO 가 존재하는경우에 소프트파싱단계로 가게된다 또한 sql 파싱요청이 있을때마다 parse count 통계값을 증가시킨다

 

만일 동일한 sql 문장이 존재하지 않는다면 shard pool 래치를 획득하고 가장 적절한 크기의 프리 청크를 프리리스트에서 찾는다 shared pool 래치를 획득하는 과정에서 경합이 발생한다면 latch : shared pool 이벤트를 대기한다 오라클은 프리청크가 확보될 때까지 계속해서 shared pool 래치를 보유한다

 

만일 최적크기의 프리청크가 존재하지 않으면 조금 더 큰 크기의 프리청크를 찾아서 이를 쪼개어 사용한다 쪼개고 남은 메모리 영역은 다시 적절한 프리리스트로 등록된다.

 

모든 프리리스트를 탐색하고도 적절한 크기의 프리 청크를 찾지 못하면 LRU 리스트를 탐색한다 LRU리스트의 청크들은 재생성 가능하면서 현재 사용중이지 않은것들이다. 실패하면 ORA - 4031 에러가 발생한다

 

적절한 프리청크를 찾으면 sql 문장에 해당하는 핸들에 대해 library cache lock 을 exclusive 하게 획득하고 LCO 정보를 생성한다 LCO 가 생성되면 library cache lock 을 null 모드로 변환하고 cache pin 을 exclusive 하게 획득한후 실행계획을 생성한다 지금까지의 모든과정을 하드파싱이라고 한다 하드파싱이 발생하면 pasing count (hard) 통계값을 증가시킨다

만약 하드파싱과정에서 sql 문장의 오류가 발생하면 pasing count(failure) 통계값이 같이 증가한다

 

오라클은 sql 커서에 대해 library cache lock 과 library cache pin 을 shared 모드로 획득하고 sql 문장을 실행한다. 이 과정을 excute 단계라고 한다.

 

오라클은 실행이 완료된 sql 커서에 대해 데이터를 fetch 한다 이 과정을 fetch 단계라고 한다.

이 단계에서 library cache lock 을 null 모드로 변환하고 library cache pin 은 해제한다

 

아무리 많은 프리청크들이 존재한다고 하더라도 요청된 sql 을 담을 수 있는 최적크기 이상의 프리청크를 발견하지 못하면 오라클은 더이상 작업을 진행하지 않는다는 점에 유의해야한다

 

출처 :exem - OWI

'DB, Storage > oracle' 카테고리의 다른 글

transaction 개요  (0) 2013.12.01
대기이벤트  (0) 2013.11.29
latch 와 lock  (0) 2013.11.26
undo 와 redo 의 차이  (0) 2013.11.25
system and sysaux tablespaces  (0) 2013.11.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   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
글 보관함