mingming

Oracle DB Architecture - Shared Pool 본문

새싹 하이브리드 클라우드/Database

Oracle DB Architecture - Shared Pool

mingming_96 2023. 10. 11. 17:35

 

SGA ( System Global Area )

  • 오라클에서 사용하는 공용 메모리 영역, 동일 데이터베이스 접속하는 사용자는 동일한 SGA 공유
  • Shared Pool
  • Data Buffer Cache
  • Redo Log Buffer
  • Large Pool
  • Java Pool
  • Streams Pool

Share Pool

 

Shared Pool 목적 

 

Shared Pool 은 SQL을 수행하는 과정에서 파싱의 역할을 수행합니다. 파싱을 수행함에 있어 빠르게 수행하여 자원사용을 최소화 하는 부분에 목적을 두고 있습니다.

 

 

파싱( Parsing )

유저 프로세스에서 요청한 SQL을 수행하기 전에 수행할 수 있는 SQL인지 아닌지 검증하고 분석하는 단계
소프트 파싱과 하드 파싱으로 구분됩니다.

소프트 파싱 

검색 단계에서 기존과 동일한 SQL이 수행된 걸 확인하고 해당 SQL의 파싱 정보를 재사용 

하드 파싱 

기존에 동일한 SQL이 수행되었지만 메모리가 부족하여 LRU 알고리즘에 의해 버려지거나 수행된 적 없는 SQL로 다시 파싱을 수행 

 

Shared Pool 구성 요소 

고정 영역 : 프로세스 목록 / 세션 목록 Enqueue 목록 / 트랜잭션 목록 

 

동적 영역 

  • 라이브러리 캐시 ( Library Cache )
    • SQL을 수행하기 위한 모든 정보를 저장
    • Subpool 별로 LRU 리스트, Free 리스트 및 Shared Pool Latch 사용 
  • 데이터 딕셔너리 캐시 ( Data Dictiory Cache )
    • 시스템 테이블 스페이스의 딕셔너리 정보 저장 
  • SHARED_POOL_SIZE 파라미터를 통해 제어됩니다.

Reserved 영역 : 동적 메모리 할당을 위한 공간으로 파싱 공간을 많이 필요로 하는 SQL 파싱에 주로 사용 

 

LRU 알고리즘

LRU( Least Recently Used )는 가장 오랫동안 참조되지 않는 페이지를 교치하는 방식입니다.

Latch 

메모리에 대한 LOCK 메커니즘을 의미합니다.
SGA는 공유 자원이므로 많은 Latch가 존재합니다.

Enqueue

테이블 등의 오브젝트에 대한 LOCK 메커니즘을 의미합니다.

 

Library Cache Subpool

하나의 Shared Pool을 여러개의 Subpool로 나누어 관리할 수 있습니다.

Shared Pool Latch가 하나일 때 발생하는 경합을 최소화 시킬 수 있습니다.

너무 많은 개수로 Subpool을 구성하게 되면 ORA-4031 발생 가능성이 증가합니다.

 

SubPool이 없는 경우 

  • 라이브러리 캐시로부터 메모리 조각을 할당해주는 Shared Pool Latch가 하나이므로 모든 서버 프로세스는 하나의 Shared Pool Latch에게 요청합니다.

SubPool이 있는 경우

  • 라이브러리 캐시가 여러 개의 Subpool로 구분되어 있고, 각각의 Subpool에는 Shared Pool Latch가 존재하므로 할당받은  Subpool의 Shared Pool Latch에게 요청합니다.

 

ORA-4031

Shared Pool 및 Buffer Cache와 같은 메모리 구성요소의 메모리 부족 혹은 과도한 사용자 세션에 의해 발생합니다.

 

Library Cache Hash Table 

Hash Table은 기존에 수행된 모든 SQL에 대한 정보를 저장하고 있으며 기존에 수행된 SQL 정보를 빠르게 검색할 수 있는 구조를 가지고 있습니다. 
이를 통해 파싱하고자 하는 SQL에 대해 기존 파싱 정보가 있는지 없는지 여부를 빠르게 확인하여 소프트파싱을 할지 하드파싱할지 결정하게 됩니다.

 

파싱 수행 과정

순서 항목 발생 주체 또는 발생 지점
1 문장 확인 ( Syntax Check ) Shared Pool의 라이브러리 캐시 및 데이터 딕셔너리 캐시
2 Semantic 확인  Shared Pool의 데이터 딕셔너리 캐시
3 검색  Shared Pool의 라이브러리 캐시
4 Optimization 옵티마이저
5 TM 락 서버 프로세스