본문 바로가기
ORACLE/ADMIN

[Oracle] SGA Shared Pool 공유풀 사용 원리 :: 마이자몽

by 마이자몽 🌻♚ 2020. 3. 31.

Shared Pool

Library Cache : parsing된 정보를 저장
Data Dictionary Cache : Data Dictionary의 정보를 저장 --> Hard Parse 작업을 빨리 해주기 위해
Result Cache : 실행된 결과를 저장 (11g new feature) --> 결과로 적은 내용을 반환해주는 값을 저장해두면 바로 읽을 수 있다.

Shared Pool은 Libray Cache, Data Dictionary Cache, Server Result Cache 3가지 구성요소를 갖고 있습니다. 동일한 문장이 반복적으로 들어왔을 때 Parse 작업을 하지 않고 바로 사용할 수 있도록 공유의 목적으로 사용되고 있습니다. 이해를 돕기 위해 우리가 일반적으로 사용하는 SELECT문 요청이 들어왔을때 Shared Pool에서 어떤 작업이 이루어지는지 알아보겠습니다.

 

 

 

Select Process

SELECT SAL FROM EMP WHERE EMPNO = 7499;

위의 쿼리가 User Process에서 요청하여 Listenser를 통해 Connection까지 완료되었다면, Server Process가 해당 SELECT문을 처리합니다. 결과까지 반환하기 까지 Parse - Execute - Fetch 단계를 거칩니다. Shared Pool은 Parse 단계에서 사용됩니다.

 

 

 

Parse

Parse 단계는 Compile하는 단계라고 생각하면 될것 같습니다.  들어온 Query문에 대해서 몇가지 확인을 하고 실행할 수 있는 준비를 하는 단계입니다.

 

 

우선 Query의 문법에 이상이 없나 확인해야합니다.

 

 

 

다음은 Semantic Check 작업을 합니다. Query문 내의 테이블과 컬럼은 데이터베이스에 존재하는지, 테이블을 읽을 수 있는 권한은 있는지, 유효성 검사를 합니다.

 

 

 

Query 문법에도 이상이 없고, 객체의 유효성이나 권한에도 문제가 없다면 다음 단계는 실행계획을 선정하는 작업입니다. Full Scan을 통해서 검색할건지, Index를 이용한 검색을 할건지 여러 요소들을 COST로 산정하여 가장 낮은 COST를 갖는 실행계획을 선정합니다.

 

 

 

실행 계획까지 산정이 완료되면 들어온 SQL문, 선정된 실행 계획 그리고 P-Code라는 것을 Shared SQL Area 공유 SQL 영역에 올립니다. 공유 SQL 영역 메모리에 올리면 Parse 작업은 끝입니다. 그런데 생각해보면, 이 Parsing 작업이 매번 Query가 들어왔을 때 해줘야할까요? 그렇다면 공유의 의미가 없겠죠? 그래서 사실은 Parse 작업을 할때 Shared Pool에 들려서 확인작업을 해줍니다.

 

 

 

Shared Pool Select Process

Shared Pool이 중간에 거치는 Select Process입니다.

Parse 단계를 거치기 전에 Shared Pool을 한번 들립니다. 들어온 Query에 대해서 Shared Pool 공유 SQL 영역에 들어온 내역이 있는지 확인하고 존재한다면 Parse 작업을 건너 뛰고 바로 Execute로 넘어가고 없다면 Parse 작업을 진행합니다. 이 두가지 상황에 대해서 Hard Parse, Soft Parse라고 정의합니다.

 

Hard Parse : Parse 작업을 함
Soft Parse :  Parse 작업을 건너뛰고 Execute로 넘어감

 

 

 

Library Cache 메모리 관리

계속 사용하다 보면 언젠가는 메모리가 부족하게됩니다. 그럼 공유 SQL 영역이 들어있는 Library Cache는 메모리 관리를 어떻게 할까요? 새로운 데이터가 들어왔을때 메모리 공간이 부족하면 LRU(Least Recently Used) 알고리즘을 사용합니다. 가장 오랫동안 사용되지 않은 데이터부터 삭제하여 새로운 데이터를 메모리에 올립니다.

 

 

 Shared Pool 메모리 확인

1
show parameter shared_pool_size

결과로 0이 나오는 경우가 있습니다. 이럴때는 아래 명령어로 용량을 확인합니다.

 

1
show parameter sga_target

10g의 new feature로 자동 공유메모리 관리를 할 수 있습니다. 

ASMM(Automatic Shared Memory Management) 동적으로 SGA 구성요에 대한 메모리를 조정할 수 있습니다.

 

 

Database Buffer Cache Execute 참조 글

 

[Oracle] SGA Database Buffer Cache DBC 데이터베이스 버퍼 캐시 사용원리 :: 마이자몽

SGA Shared Pool 관련 링크 [Oracle] SGA Shared Pool 공유풀 사용 원리 :: 마이자몽 Shared Pool Library Cache : parsing된 정보를 저장 Data Dictionary Cache : Data Dictionary의 정보를 저장 --> Hard Parse..

myjamong.tistory.com

 

 

태그

,

댓글0