권순용의 DB 이야기
Shared Pool 내부 수행 방식 1 0 99,999+

by axiom Shared Pool Heap0 Soft Parsing [2014.03.03]


데이터베이스 아키텍처를 분석하고 학습하다 보면 항상 데이터베이스 내부 구조에 대한 호기심이 생기게 마련이다. 이와 같은 데이터베이스 내부 아키텍처는 실제 업무를 수행하는 데 그다지 큰도움이 되지 않는다고 생각할 수 있다.

하지만 데이터베이스 내부 아키텍처를 정확히 이해한다면 데이터베이스에 문제가 발생하는 경우 정확하고 논리적인 분석이 가능하게 된다. 그렇기 때문에 데이터베이스를 확실하게 분석하기 위해서는 데이터베이스 Internal은 반드시 이해하는것이 유리하다.

이번 강의에는 데이터베이스의 SQL Parsing을 책임지는 Shared Pool에 대해 좀 더 자세히 확인해 보자

Shared Pool 아키텍처

[그림 1]은 지난 시간에도 언급했던 것으로 오라클 Shared Pool의 전체적인 아키텍처를 보여준다. 이 그림에서 Shared Pool은 어떻게 작동 하는지를 지금부터 확인해 보자.

  • [그림 1] 오라클 Shared Pool의 전체적인 아키텍처
  • 오라클 Shared Pool의 전체적인 아키텍처

  • 1. SQL 수행 : 수행하고자 하는 SQL 수행
  • 2. ASCII 값으로 변경 : 해당 SQL에 대해 ASCII 값으로 변환
  • 3. 해시 함수 적용 : 해당 ASCII 값을 이용해 해시 값을 수행
  • 4. 해시 버켓 선택 : 해시 함수의 값을 이용해 해당 해시 버켓 확인
  • 5. 해시 버켓 검색 : 해당 해시 버켓의 뒤에서부터 핸들러 검색
  • 6. 핸들러 확인 : 수행된 SQL과 동일한 SQL에 대한 핸들러를 발견하면 Soft Parsing을 수행하며 동일한 SQL을 저장하고 있는 핸들러를 발견하지 못하게 되면 해당 해시 버켓의 뒤에 핸들러를 생성

위와 같은 절차를 통해 SQL이 수행되면 해시 테이블을 검색해 기존에 수행된 SQL에 대한 정보 중 현재의 SQL과 동일한 SQL에 대한 핸들러가 존재하는지를 검색하게 된다.

검색해 존재하게 되면 해당 핸들러 정보를 이용해 Soft Parsing을 수행하게 되며 동일한 SQL에 대한 정보가 존재하지 않으면 해당 해시버켓에 해당 SQL에 대한 핸들러를 생성해 연결하게 된다.

이와같은 핸들러에는 Heap0 메모리에 대한 정보를 가지고 있으며 실제적인 Soft Parsing은 Heap0 메모리의 내용에 의해 수행된다.

핸들러는 다음과 같은 구성요소를 가진다.

  • - NAME : 핸들러의 이름을 저장
  • - NAMESPACE : 해당 핸들러에 대한 Namespace를 저장
  • - LOCK OWNER : 해당 핸들러에 대한 LOCK을 수행한 OWNER 관련 정보를 저장
  • - LOCK WAITER : 해당 핸들러에 대한 LOCK을 수행했으나 OWNER가 이미 존재해 대기하고 있는 WAITER에 대한 정보를 저장
  • - PIN OWNER : 해당 핸들러와 연결된 Heap 메모리에 대한 LOCK을 수행한 OWNER 관련 정보를 저장
  • - PIN WAITER : 해당 핸들러와 연결된 Heap 메모리에 대한 LOCK을 수행했으나 OWNER가 이미 존재해 대기하고 있는 WAITER 관련 정보를 저장
  • - FLAG : 핸들러의 상태에 대한 정보를 저장
  • - HEAP0 : Heap0 메모리에 대한 주소를 저장

핸들러는 위와같은 정보를 저장하고 있으며 앞서 언급한것과 같이 가장 중요한 요소는 Heap0 메모리에 대한 정보다.

Heap0 메모리

Heap0 메모리는 [그림 2]와 같이 여러 개의 구성요소를 가지게 된다.

  • [그림 2] Heap0 메모리의 구성요소
  • Heap0 메모리의 구성요소

  • - TYPE
  • - NAME
  • - FLAGS
  • - TABLES
  • - Data Blocks

그럼 Heap0 메모리의 구성요소를 하나하나 확인해 보자

  • - Type : Heap0 메모리를 구성하는 Type은 동일 Namespace를 그룹핑해 구분하기 위한 요소다. 이는 보다 빨리 오브젝트를 검색하기 위해 Namespace를 그룹화하는 것이다. 이와 같은 Type은 64개가 존재하면 동일 오브젝트는 동일 Type에 속하게 된다
  • - Name : 오브젝트의 Name은 3개의 파트로 구성된다. 이는 Schema Name, Object Name, DB Link Name으로 구성된다.

나머지 Heap0 메모리에 대한 구성요소는 다음에 언급하기로하자. 이처럼 Heap0 메모리는 Soft Parsing을 위해 매우 중요한 역할을 수행하게 된다

- 강좌 URL : http://www.gurubee.net/lecture/2697

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입