11. Shared Pool

조회 수 8175 추천 수 0 2011.09.07 10:03:38
실천하자 *.18.78.25

Oracle_architecture.jpg


▲ 오라클 구조



shared_pool.jpg


▲ 오라클 메모리 구조 - SGA(Shared Pool)


Shared Pool = Dictionary Cache + Library Cache



1. 딕셔너리 캐시 (Row Cache) - 오라클의 딕셔너리 정보를 저장하는 캐시영역

  • 특징
    • Row 단위로 Read / Write
    • 오브젝트(테이블, 인덱스), 테이블 스페이스, 데이터 파일, 사용자, 제약, 시퀀스, DB Link 등 정보 캐싱
    • 데이터 입출력을 빠르게 하기 위한 캐시영역
  • 과정
    • 객체 생성 → 딕셔너리 저장 → 로우 캐시 → 객체 사용
  • 로우 캐시가 관리하는 엔트리 각각에 대해서 하나의 래치 할당



2. 라이브러리 캐시 - 사용자 SQL 및 실행계획이 저장된 캐시영역


오라클의 모든 동적 메모리를 관리하는 Heap Manager와 Library Cache Manager에 의해 관리

Library Cache안에 저장된 Object를 가장 빠르게 찾고 저장하기 위한 방법
  • 공유 SQL 영역
    • 주어진 SQL 문장에 대해 Parse Tree와 실행 계획 소유
    • 여러번 걸쳐 사용되는 SQL문장을 하나의 공유 SQL 영역에 저장하여 관리
    • 전체 공유 풀이 꽉 차있을 시 LRU 알고리즘에 따라 메모리 사용 빈도가 낮은 SQL 제거
  • PL/SQL 프러시저와 패키지
    • SQL을 처리하는 것과 같이 PL/SQL 프로그램 Unit(Function, Procedure, Package, Anonymous Block) 처리
    • SQL과 마찬가지로 구문 분석 후 컴파일 된 형태로 공유 SQL 영역에 저장
    • 오라클은 프로그램 단위로 실행되는 세션에 할당된 값을 저장하기 위해 개별 SQL 영역에 메모리를 할당
→ 여기에는 지역변수, 전역변수, 패키지변수, 실행된 SQL에 대한 버퍼가 포함
→ 개별 사용자는 자신의 개별 SQL 영역에 분리된 복사본 소유
→ PL/SQL 프로그램의 구문분석 정보와 실행 계획은 공유 SQL 영역에서 사용
    SQL 실행은 각 세션에 대한 개별 영역에 저장


※ 참고


  • 소프트 파싱
    • 전에 처리한 작업 중 같은 것이 있을 시 찾아서 파싱
  • 하드 파싱
    • 쿼리 구문 분석 및 오류 및 실행 권한 확인, 최적화(Optimization) 과정을 통한 실행 계획 생성
    • 실행엔진이 가독 가능한 포맷팅
  • 딕셔너리 캐시 ☞ 하드파싱 시 사용
  • 라이브러리 캐시 ☞ 소프트파싱 시 사용
  • SHARED_POOL_SIZE : 파라미터로 크기 설정
  • 9i 이후는 (동적 파라미터로 변경 가능)
    alter system set shared_pool_size = 100 M;