Tip
2010.04.28 16:18

SQL수행 처리 절차

조회 수 20809 추천 수 0 댓글 0

SQL수행 처리 절차
=================

Heap Manager (KGH, Kernel Generic Heap) 오라클의 기본적인 메모리 할당법

Top heap -> Extent#n(물리적 그래뉼을 사용) -> chunk#n


1번 부터 건너 뛰고 8번 단계를 수행 하는 것이 soft parsing
전체를 다 수행하는 것이 hard parsing

1. 사용자가 새로운 SQL문장을 수행 요청하면 오라클은 기본적인 문법체크와 권한 체크등을 수행한 후,
   해시 버킷을 관리하는 library cache 래치를 획득하고, Library Cache 영역에 동일한 SQL문장, 즉
   동일한 LCO(library cache object) 가 존재하는지 확인한다.
   library cache 래치를 획득하는 과정에서 경합이 발생하면  latch: library cache 이벤트를 대기한다.
   동일한 LCO가 존재하는 경우에는 8번 단계를 실행하게 되는데, 이 과정을 소프트파싱(Soft Parsing)
   이라고 부른다. 오라클은 SQL 파싱 요청이 있을 때마다 parse count(total) 통계갑을 증가 시킨다.
  
2. 만일 동일한 SQL 문장이 존재하지 않는다면, shared pool 래치를 획득하고 가장 적절한 크기의 프리 청크를
   프리리스트에서 찾는다. shared pool 래치를 획득하는 과정에서 경합이 발생하면 latch: shared pool 이벤트를
   대기한다. 오라클은 프리청크가 확보될 때까지 계속해서 shared pool 래치를 보유한다.
  
3. 만일 최적 크기의 프리 청크가 존재하지 않으면 좀 더 큰 크기의 프리 청크를 찾아서 이를 쪼개어(Split) 사용한다.
   쪼개고 남은 메모리 영역은 다시 적절한 프리리스트로 등록된다.
  
4. 모든 프리리스트를 탐색하고도 적절한 크기의 프리 청크를 찾지 못하면 LRU 리스트를 탐색한다. LRU 리스트의
   청크들은 재생성가능(Recreatable)하면서 현재 사용중이지 않은 것(pin되지 않은 것)들이다.
  
5. LRU 리스트를 탐색하고도 적절한 크기의 청크를 확보하지 못하면 Shared Pool 내의 여유메모리의 공간을 추가적으로
   할당한다.
  
6. 위의 과정이 모두 실패하면 ORA-4031 에러가 발생한다.

7. 적절한 프리 청크를 찾으면 SQL문장에 해당하는 핸들(Library Cache Handle)에 대해 library cache lock을
   Exclusive하게 획득하고 LCO정보를 생성한다. LCO가 생성되면 library cache lock을 Null 모드로 변환하고,
   library cache pin을 Exclusive하게 획득한 후 실행 계획(Execution Plan)을 생성한다.
   2번 ~ 7번까지의 과정을 하드파싱(Hard Parsing)이라고 부른다. 하드파싱이 발생하면
   오라클은 parse count(hard) 통계값을 증가시킨다. 만일 하드파싱 과정에서 SQL문의 오류가 발견되면
   (가령 존재하지 않는 객체 참조 등) parse count(hard) 통계값과 함께 parse count(failure) 통계값이
   같이 증가한다.
  
8. 오라클은 SQL커서에 대해 library cache lock과 library cache pin을 shared 모드로 획득하고 SQL문장을
   실행한다. 이 과정을 실행(Execute) 단계라고 부른다.
   SQL커서가 참조하는 LCO(테이블,프로시져 등) 에 대해서는 기본적으로 SQL 커서와 동일한 모드로
   library cache lock과 library cache pin을 획득한다. 하지만 DDL 문장과 같이 객체 정보를
   변경하는 것은 해당 LCO에 대해서 library cache lock과 library cache pin을 Exclusive 모드로 획득하기도
   한다. 예를 들어 "alter table xxx add varchar2(10)" 과 같은 sql문장이 수행되는 경우 수행(Execute)
   단계에서 SQL 커서 자체에 대해서는 library cache lock을 Shared 모드로 획득하지만, 테이블 xxx에
   해당하는 LCO에 대해서는 library cache lock을 Exclusive 모드로 획득한다. library cache lock과
   library cache pin을 획득하는 과정에서 경합이 발생하면 각각 library cache lock이벤트와
   library cache pin 이벤트를 대기한다.
  
9. 오라클은 실행이 완료된 SQL 커서에 대해 테이터를 페치한다. 이과정을 페치(Fetch) 단계라고 부른다.
   페치 단계에서는 SQL 커서에 대해 library cache lock을 Null모드로 변환하고 library cache pin을
   해제한다. 오라클 메뉴얼에서는 NULL모드로 획득한 library cache lock을 breakable parse lock
   이라고 부른다.
  
  
  


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Q&A Oracle관련 게시물만 Sean 2014.04.09 84839
80 Tip 10G rollback시간 예상하기 고구마 2010.04.09 15155
79 Tip SESSION KILL에 대하여 고구마 2010.04.09 13381
78 Tip Trace Event 세팅 고구마 2010.04.09 17285
77 Tip 영역할당해제 고구마 2010.04.09 11469
76 Tip INDEX 사용여부 확인하기 고구마 2010.04.09 19101
75 Tip Log miner 사용방법 1 김준호 2010.04.06 29847
74 Tip 화일의 손상 여부를 확인하는 dbv 사용 방법 김준호 2010.04.06 18477
73 Tip shared pool wait event 2 file 유주환 2010.04.05 28881
72 Tip SHRINK 와 MOVE 의 특징 김준호 2010.03.31 13630
71 Tip Windows Server 2008 (64bit) - Oracle 10g 설치 file 김준호 2010.03.29 20682
70 Tip TABLESPACE FREESPACE 조회하기 1 고구마 2010.05.19 16657
69 Tip UDP Buffer Tuning 기법 3 김준호 2010.05.04 30852
68 Tip TM과 TX 락 1 유주환 2010.04.30 19020
67 Tip 오라클 튜닝 세미나 자료(IO) 1 file 고구마 2010.04.28 13927
66 Tip 오라클 튜닝 세미나자료 (메모리) file 고구마 2010.04.28 14662
» Tip SQL수행 처리 절차 고구마 2010.04.28 20809
64 Tip show space 고구마 2010.04.28 16767
63 Tip (Diagnostics) Oracle10g DB 접속 안될때 sqlplus 에서 SYSTEMSTATE DUMP 받기 1 고구마 2011.05.18 28946
62 Tip 10g standard edition과 enterprise edition의 차이점 2 윤현 2011.05.16 26017
61 Tip 윈도우에서 일정기간 지난 파일 및 폴더 자동삭제 하기 1 송기성 2011.03.31 21211
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8