본문 바로가기
ORACLE DBMS

Shared Pool 개념

by Boggi 2025. 1. 7.
반응형

Shared Pool은 SQL을 수행하는 과정에서 파싱의 역할을 수행한다. 파싱(Parsing)은 유저 프로세스가 요청한 SQL문을 검증하고 분석하는 단계이다. 파싱은 소프트 파싱과 하드 파싱으로 나눌 수 있다.

 

출처: 초보자를 위한 ORACLE 12c DBA편

 

Shared Pool의 목적은 파싱을 수행할 때 빠르게, 자원 사용을 최소화하여 수행하는 것이 목적이다.

 

  • Shared Pool의 전체 구성 요소

출처: 초보자를 위한 ORACLE 12c DBA편

Shared Pool은 동적 영역(Dynamic Area), 고정 영역(Permanent Area), Reserved 영역으로 나눌 수 있다.

 

동적 영역의 구성 요소는 Library Cache, Data Dictionary Cache(Row Cache)로 나눌 수 있다. 동적 영역의 크기는 SHARED_POOL_SIZE 파라메터를 사용하여 지정할 수 있다.

  • Library Cache : 해쉬 테이블, LRU 리스트, Free 리스트, Shared Pool Latch 사용 등이 키워드
            - 해쉬 테이블 : 지금까지 수행된 모든 SQL을 저장.
            - LRU 리스트 : 최근에 가장 적게 사용된 SQL를 메모리에서 삭제하여 메모리 사용 효율 극대화
  • Data Dictionary Cache(Row Cache) : System Tablespace의 딕셔너리 정보를 저장

고정정역의 구성 요소는 프로세스 목록, 세션 목록, Enqueue 목록, 트랜잭션 목록으로 나눌 수 있다. 고정 영역의 크기는 Fixed Size의 값이다. 고정 영역의 크기는 자동으로 할당되며 사용자가 지정할 수 없다.

Reserved 영역은 파싱 공간을 많이 필요로 하는 SQL 파싱에 주로 사용된다.

 

Reserved 영역은 Shared pool의 공간은 미리 예약해서 메모리 조각 부족으로 SQL 수행 실패를 방지하기 위한 영역.

SHARED_POOL_RESERVED_SIZE 파라미터를 통해 공간을 지정할 수 있으며, 이 공간은 4,400Byte이상의 크기가 큰 SQL이 수행될 경우 해당 SQL 정보를 저장할 메모리 조각을 찾지 못해 발생하는 ORA-4031 에러를 감소시키기 위해 설정한다.

 

Shared Pool은 공유 메모리로  어떤 고유 자원에 대해서 동시에 변경하는 것을 방지하고 순차적으로 엑세스하는 것이 중요하다. 이를 도와주는 것이 락(Lock) 메커니즘이다.

  • Latch : 메모리에 대한 락 메커니즘
  • Enqueue : 테이블 등의 오브젝트에 대한 락 메커니즘

출처: 초보자를 위한 ORACLE 12c DBA편

subpool이 존재하지 않는 경우: 하드 파싱을 위해서 라이브러리 캐쉬로부터 chuck를 할당해주는 shared pool latch가 하나이므로 모든 서버 프로세스는 하나의 sahred pool latch에게 요청한다.

subpool이 존재하는 경우 : 각각의 subpool에는 각각의 shared pool latch가 존재한다.

 

shared pool의 장점 : Sahred Pool Latch 경합 감소

shared pool의 단점 : ORA-4031 발생 가능성 증가

 

Reseved 영역

 

데이터 딕셔너리 캐쉬

Semantic 체크 시 데이터 딕셔너리 캐쉬에 캐싱되어 있는 오라클의 데이터 딕셔너리 테이블을 통해 확인을 한다. 만약 필요한 데이터 딕셔너리 테이블이 존재하지 않으면 시스템 테이블 스페이스로부터 해당 정보를 로우 단위로 데이터 딕셔너리에 캐싱한다. 이런 이유에서 데이터 딕셔너리 캐쉬를 로우 캐쉬라고 한다. 

 

 


파싱 순서

1. 문장 확인(Syntax Check) - 오탈자, 문법 오류 확인

2. 의미 확인(Semantic Check) - 권한, 테이블, 컬럼 등의 존재 확인

3. 검색 단계 (Search) - 동일한 SQL문이 있는지 해쉬 테이블에서 확인(소프트 파싱 / 하드 파싱)
     - Soft Parsing : Hash Bucket에 Object Handle 중 동일한 SQL이 존재하면, 검색을 정지하고 해당 SQL 수행정보 및
                              실행계획 등을 재사용.
                              Soft Parsing은 파싱에 대한 부하를 감소시켜 전체 실행 시간 단축 및 자원 사용을 감소시킬 수 있다.                                    Soft Parsing을 위해서는 대,소문자 일치 / 띄어 쓰기 일치 /  오브젝트의 소유자 일치하여 SQL문을
                              생성하는 것이 필요하다. 

     - Hard Parshing : 해쉬 함수에 던져 나온 값의 Hash Bucket의 마지막 Object Handle 뒤에 파싱 정보를 새로 생성

4. Optimization 단계 - 오라클의 옵티마이저가 좀 더 좋은 실행계획을 생성하기 위해서 쿼리를 변경하는 단계

5. TM Lock 단계 - 파싱 트리(Parsing Tree)를 만드는 동안 테이블이 삭제되면 안되기 때문에 아주 잠깐 테이블에
                             TM Lock을 수행.

 

이 때 실행되는 SQL에 대한 정보를 저장하기 위해서 사용되는 프로세스 프로세싱 기법이 LRU 알고리즘이다.

  • LRU 알고리즘 : 메모리 공간이 필요 시 최근에 가장 적게 사용한 메모리 공간을 가장 먼저 재사용하는 오라클 메모리 관리 방법

 

 

 

 

파싱의 검색단계

출처: 초보자를 위한 ORACLE 12c DBA편

 

Shared Cursor(= Object Handle)

Shared Cursor는 실제 수행한 SQL에 대한 정보를 가지고 있고 수행한 SQL과 동일한 Sahred Cursor가 존재할 경우 소프트 파싱이 가능하다. 결국, 소프트 파싱은 수행하는 SQL문이 해쉬 테이블을 검색하여 동일한 SQL의 shared cursor를 찾아 재사용하는 것이다. 즉 Shared Cursor는 Object Handle을 의미한다.

출처: 초보자를 위한 ORACLE 12c DBA편

'ORACLE DBMS' 카테고리의 다른 글

083 OCP 시험 문제  (0) 2025.01.09
데이터 버퍼 캐쉬(Data Buffer Cache) 개념  (0) 2025.01.07
SGA(System Global Area)의 개념  (0) 2025.01.07
082 OCP 시험 문제  (1) 2024.12.30
강남 아이티윌 'DBA 양성 과정' 후기  (0) 2024.11.26