권순용의 DB 이야기
Shared Pool 2 0 99,999+

by axiom Shared Pool Library Cache ROW Cache Soft Parsing Hard Parsing [2014.03.03]


오라클 데이터베이스를 관리하다 보면 데이터베이스 메모리를 이해하게 된다. 이와 같은 오라클 데이터베이스 메모리는 SGA라는 공간을 가지게 된다. 아마 오라클 데이터베이스를 처음 접하는 대부분의 사람들은 오라클 데이터베이스의 SGA라는 용어와 구조를 먼저 만나게 될 것이다.

그렇기 때문에 메모리 영역인 SGA는 익숙하게 여겨지는 부분이기도 하지만 좀더 깊이 파고들다 보면 오라클 데이터베이스에서 가장 어려운 부분의 하나임을 깨닫게 된다. 더 쉽게 오라클 데이터베이스에 접근할 수 있도록 지금부터 SGA에 대한 이야기를 시작해 본다.

먼저 이번 시간에는 오라클 데이터베이스 메모리인 SGA 영역에서 Shared Pool을 살펴본다. Shared Pool은 오라클 SGA를 구성하는 가장 기본적인 구성 요소에 해당한다. 따라서 Shared Pool의 이해는 오라클 메모리 구조를 이해할 수 있는 초석이 될 수 있다.

  • [그림 1] Library Cache의 유래
  • Library Cache의 유래

Shared Pool의 목적

Shared Pool은 다음과 같이 두 가지 종류로 분류된다.

  • - Library Cache : Library Cache는 SQL을 파싱하기 위해 필요한 정보들을 저장한다. 이와 같이 저장된 정보를 이용해 동일한 SQL이 수행된다면 별도로 파싱을 수행하지 않고 기존에 저장된 파싱 정보를 재사용하게 된다. 이처럼 Library Cache는 SQL의 파싱을 수행하는 역할이 주를 이룬다.
  • - ROW Cache : SQL을 파싱하는 과정에서 필요한 오브젝트 정보, 컬럼 정보, 유저 정보 및 권한 정보들을 ROW Cache에 저장하게 된다. 이와 같은 정보를 이용해 Library Cache에서 SQL을 파싱하는 과정을 지원하게 된다.

Shared Pool은 이와 같이 두 가지 영역으로 구분되며 2개의 영역은 결국 SQL을 파싱하기 위한 공간으로 구성된다. 그렇다면 이와 같은 Shared Pool은 무엇이 가장 중요할까? 그것은 SQL의 빠른 파싱일 것이다.

오라클은 SQL의 빠른 파싱을 위해 다음과 같은 두 가지 방식을 이용하게 된다.

  • - Soft Parsing : 수행된 SQL에 대해 동일한 SQL이 기존에 수행되어 Library Cache에 기존 정보가 존재해 별다른 파싱 없이 해당 정보를 재사용해 파싱을 생략하고 SQL을 수행하는 파싱을 Soft Parsing이라고 한다.
  • - Hard Parsing : 수행된 SQL에 대해 기존에 수행된 적이 없거나 기존에 수행되었더라도 파싱 정보가 Library Cache에 존재하지 않아 처음부터 파싱을 수행하는 경우를 Hard Parsing이라고 한다.

이와 같은 구성을 가지는 Shared Pool은 파싱을 빠르게 하는 것이 목적이며 그러기 위해서는 수행된 SQL이 기존에 수행되어 파싱 정보가 Library Cache에 저장되어 있으며 Soft Parsing을 수행하게 되므로 빠른 파싱을 수행할 수 있다.

그렇기 때문에 Shared Pool의 최종 목적은 수행된 SQL에 대해 파싱 정보를 최대한 오랫동안 관리해 그 후에 동일한 SQL이 수행될 경우에 Soft Parsing을 수행하게 하는 것이다.

이와 같은 목적을 달성하기 위해 Library Cache와 ROW Cache가 존재하는 것이다. 그 중 ROW Cache는 파싱을 지원하는 역할을 수행하며 실제적인 파싱 정보는 Library Cache에 저장된다.

이와 같은 Library Cache는 LRU 알고리즘을 이용해 최근 가장 많이 사용된 파싱 정보를 계속 저장하게 되고 최근 적게 사용된 파싱 정보는 공간이 부족하면 버리게 된다.

또한 Soft Parsing을 최대한 빠르게 확인하기 위해 Hash Table을 이용하게 되고 SQL이 수행된 이후에 Hash Table을 검색해 해당 SQL이 파싱 정보가 저장되어 있는지를 빠르게 확인하게 된다.

이제부터 Shared Pool의 핵심 아키텍처인 Hash Table이 어떻게 구성되는지를 확인해 보자.

Shared Pool 아키텍처

[그림 2]는 오라클 Shared Pool의 전체적인 아키텍처다. 우선 각각의 항목을 설명하면 다음과 같다.

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

  • - Library Cache Manager(KGL) : Shared Pool의 모든 동작을 주관하는 관리자다. Shared Pool을 구성하는 Hash Table을 주로 관리하게 된다.
  • - Hash Table : Object Handle로 구성되며 해당 Handle을 관리하는 Table이다.
  • - Hash Function : Hash Table을 구성하기 위해 각각의 SQL을 Ascii 값으로 변경해 수행하는 함수다.
  • - Hash Bucket : Hash Function을 적용한 값들을 정의한 공간이며 하나의 Bucket에는 Hash Function을 적용해 동일한 값을 Return 받은 SQL의 정보를 연결하게 된다.
  • - Object Handle : Bucket에 연결되는 하나하나의 SQL 및 기타 정보들을 Object Handle에서 관리하게 된다.
  • - Heap0 : Object Handle이 기본적으로 가지는 메모리 영역이며 Heap0 메모리를 통해 모든 정보를 관리하게 된다.

Shared Pool은 이와 같이 여러 개의 요소로 구성되며 이들에 의해 작동된다. 각각의 구성요소가 어떻게 동작하는지는 다음 시간에 설명한다.

참고링크

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

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

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

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