조회 수 12374 추천 수 0 댓글 1

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
   이라고 부른다.
  

  • 유주환 2010.05.07 21:23

    select : parse call, execute call,fetch call

    dml : parse call,execute call


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Q&A Oracle관련 게시물만 Sean 2014.04.09 84911
80 Tip Analyze 통계정보 dbkill 2010.04.11 13298
79 TM TDE (column, tablesapce) 1 file 윤현 2011.12.27 13243
78 Tip 세마포어에 대하여 고구마 2010.04.19 13232
77 Tip NL JOIN에 대하여... 1 고구마 2011.03.21 13165
76 TM SQL 튜닝 실무사례 2 1 file 고구마 2010.04.28 13075
75 TM SQL튜닝 실무사례 3 file 고구마 2010.04.28 13058
74 Tip Outer Join의 정확한 이해 file 고구마 2011.03.21 13028
73 Tip LIBRARY CACHE PIN 고구마 2011.11.10 12949
72 Tip ora-3113 에러 분석 접근관련... 고구마 2011.06.14 12790
71 Q&A ORA--04031 에러에 대해 질문합니다. 4 고구마 2011.05.17 12747
70 Tip hardparse 발생및 세션 검사 2 도로시 2011.08.17 12666
69 TM ARDCI file 이현정 2012.10.09 12536
68 TM sql*plus에서 autotrace 설정 1 file 고구마 2010.04.06 12520
67 Tip 특정 DB USER의 SESSION수를 제한하는 방법 흑수건 2011.10.01 12390
» TM SQL문 수행 내부적 처리절차 1 고구마 2010.04.16 12374
65 TM snapshot 쉽게 사용하는 방법 2 file dbkill 2010.04.06 12315
64 TM oracle DBMS package 1 file dbkill 2010.04.18 12313
63 TM 10g SHRINK 소개 file 승현짱 2010.04.21 12216
62 TM LINUX 10G ASM 튜닝 file 고구마 2010.04.09 12080
61 Tip ORACLE 10G CONVERTING TABLESPACES WITH THE RMAN CONVERT 1 흑수건 2011.10.20 11949
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8