SGA, PGA

구분SGA (System Global Area)PGA (Program Global Area)
성격공유 메모리 (Shared)개별 메모리 (Private)
대상모든 프로세스 공용단일 서버 프로세스 전용
생성 시점인스턴스 시작 시프로세스/세션 생성 시
주요 목적데이터 공유, 디스크 I/O 감소정렬, 조인, 세션 정보 관리
관리 파라미터SGA_TARGET, SGA_MAX_SIZEPGA_AGGREGATE_TARGET

오라클 데이터베이스(Oracle Database)의 메모리 구조는 크게 모든 프로세스가 공유하는 SGA와 개별 프로세스가 독점적으로 사용하는 PGA로 나뉩니다.


  1. SGA (System Global Area)

SGA는 인스턴스의 모든 프로세스(백그라운드 프로세스, 서버 프로세스)가 공동으로 사용하는 공유 메모리 영역입니다. 데이터베이스가 시작될 때 할당되며, 데이터의 효율적인 처리와 공유를 목적으로 합니다.

주요 구성 요소

  • Database Buffer Cache: 데이터 파일에서 읽어온 데이터 블록의 복사본을 보관합니다. 사용자가 데이터를 조회할 때 디스크가 아닌 메모리에서 먼저 찾게 하여 성능을 높입니다.

  • Redo Log Buffer: 데이터 변경 이력(Redo Entry)을 저장합니다. 장애 발생 시 복구를 위해 사용되며, 나중에 LGWR 프로세스가 이를 디스크의 Redo Log File로 기록합니다.

  • Shared Pool: SQL 실행 계획, 컴파일된 코드(Library Cache) 및 데이터 사전 정보(Data Dictionary Cache)를 저장하여 SQL 재사용성을 높입니다.

  • Large Pool: 대규모 백업/복구 작업이나 공유 서버 구성 시 추가적인 메모리를 제공합니다.

  • Java Pool: 자바 명령을 실행할 때 사용됩니다.


  1. PGA (Program Global Area)

PGA각 서버 프로세스마다 개별적으로 할당되는 비공유 메모리 영역입니다. 다른 프로세스는 접근할 수 없으며, 특정 사용자의 작업을 처리하기 위한 개별 저장소 역할을 합니다.

주요 구성 요소

  • Private SQL Area: 바인드 변수 값이나 쿼리 실행 상태 정보를 보관합니다.

  • SQL Work Areas: 정렬(Sort Area)이나 해시 조인(Hash Area)과 같이 데이터 처리를 위해 일시적으로 필요한 공간입니다.

  • Session Memory: 세션의 로그인 정보나 상태 값을 저장합니다.

네, 정확한 지적입니다. 앞선 설명에서 Sort Area는 PGA(Program Global Area)에 할당되는 것이 맞습니다.

보충 설명을 드리자면, Sort Area의 위치와 성격은 다음과 같습니다.

  1. Sort Area의 할당 위치
  • PGA 내에 위치: 데이터를 정렬(Order By, Group By 등)할 때 각 서버 프로세스가 독립적으로 사용하는 공간입니다.

  • 성격: 각 사용자 세션마다 개별적으로 할당되기 때문에 다른 프로세스와 공유되지 않습니다.

  1. 예외적인 경우 (Shared Server 환경)

드문 경우지만, 오라클을 공유 서버(Shared Server) 방식으로 구성할 때는 정렬 공간의 일부가 SGA의 Large Pool에 할당되기도 합니다. 하지만 일반적인 전용 서버(Dedicated Server) 방식에서는 항상 PGA에 할당됩니다.

  1. PGA 내 Sort Area의 작동 방식

  2. 메모리 내 정렬: 정렬할 데이터가 SORT_AREA_SIZE(또는 PGA 내 가용 공간)보다 작으면 메모리 내에서 정렬을 완료합니다 (Optimal Pass).

  3. 디스크 정렬: 데이터가 너무 커서 PGA 공간이 부족하면 **Temporary Tablespace(디스크)**를 사용하게 되어 성능이 저하될 수 있습니다 (One-Pass 또는 Multi-Pass).

요약하자면: 지적하신 대로 Sort Area는 각 서버 프로세스의 개별 작업 공간인 PGA에 소속되어 정렬 작업을 수행하며, 이를 통해 프로세스 간의 간섭 없이 독립적인 데이터 처리가 가능해집니다.

SORT AREA 는 SGA 가 아니라 PGA 에 할당된다.

SQL 은 라이브러리 캐시에 캐싱된다.