DB

[Database] PGA, SGA 란?

파주상남자의 오답노트 ㅣ 2025. 3. 19. 17:27

반응형

Oracle에서 **PGA (Program Global Area)**와 **SGA (System Global Area)**는 데이터베이스 메모리 구조에서 중요한 역할을 하며, 둘 다 Oracle 인스턴스의 성능과 안정성을 보장하는 데 필수적이다. 각 메모리 영역은 특정 목적을 가지고 있으며, 사용되는 방식과 관리가 다르다.

1. SGA (System Global Area)

SGA는 데이터베이스 인스턴스의 여러 프로세스가 공유하는 메모리 영역으로, 모든 세션과 서버 프로세스가 접근할 수 있는 데이터 및 정보를 저장한다. SGA는 데이터베이스 인스턴스가 시작될 때 할당되며, 데이터베이스 서버에서 실행 중인 모든 세션 간에 공유된다.

 

SGA의 주요 구성 요소

  • Database Buffer Cache:
    • 목적: 데이터베이스 파일에서 읽은 데이터 블록을 캐시로 저장하여, 데이터베이스 성능을 향상시킨다.
    • 작동 방식: 데이터베이스에서 데이터를 읽을 때, 이를 Database Buffer Cache에 저장하여, 동일한 데이터를 다시 요청할 때 디스크 I/O를 줄이고 성능을 개선한다.
    • 세부 항목:
      • Dirty Buffer: 수정된 데이터 블록
      • Clean Buffer: 수정되지 않은 데이터 블록

 

  • Redo Log Buffer:
    • 목적: 트랜잭션의 변경 사항을 로그에 기록하여, 시스템 충돌 후 복구할 수 있도록 한다.
    • 작동 방식: 트랜잭션이 발생하면 변경 사항을 Redo Log Buffer에 기록하고, 그 후 디스크의 실제 Redo Log 파일로 기록된다. 이는 시스템 장애 복구를 가능하게 한다.

 

  • Shared Pool:
    • 목적: SQL 문, PL/SQL 블록, 데이터 딕셔너리 캐시 등, 데이터베이스가 실행하는 명령어를 저장한다.
    • 작동 방식: SQL 문장을 파싱하고, 실행 계획을 캐시하여 반복적인 SQL 실행 시 성능을 향상시킨다.
    • 세부 항목:
      • Library Cache: SQL 및 PL/SQL 코드 캐시
      • Data Dictionary Cache: 테이블 및 기타 객체의 메타데이터를 캐시

 

  • Large Pool:
    • 목적: 백업 및 복구 작업, I/O 서버 프로세스 등에 필요한 대용량 메모리 영역을 제공한다.
    • 작동 방식: Large Pool은 백업 및 복구 작업이 메모리 요구 사항이 많을 때, 다른 메모리 영역과 충돌하지 않도록 별도로 할당된다.

 

  • Java Pool:
    • 목적: Java 관련 작업을 처리하는 데 필요한 메모리 영역으로, Java 세션이나 애플리케이션을 위한 메모리 공간을 제공한다.

 

SGA 설정 예시

  • 자동 메모리 관리 사용 (Automatic Memory Management, AMM): AMM을 사용하면 SGA와 PGA의 크기를 자동으로 조정할 수 있다.이 명령은 Oracle 인스턴스에 4GB의 메모리를 할당하며, Oracle이 자동으로 SGA와 PGA를 관리한다.
sql
ALTER SYSTEM SET MEMORY_TARGET = 4G;
  • SGA 크기 수동 설정
sql
ALTER SYSTEM SET SGA_TARGET = 2G; ALTER SYSTEM SET SGA_MAX_SIZE = 4G;
  • 위 명령은 SGA 크기를 2GB로 설정하고, SGA의 최대 크기를 4GB로 설정한다.
  • SGA_TARGET 및 SGA_MAX_SIZE를 사용하여 SGA의 크기를 설정할 수 있다.

 

2. PGA (Program Global Area)

PGA는 각 사용자 프로세스에 의해 사용하는 메모리 영역으로, SGA와는 달리 각 세션에 독립적이다. PGA에는 세션의 실행 정보, 커서, 정렬 버퍼 등이 포함된다. 각 세션은 별도의 PGA 메모리 영역을 갖고 있으며, 다른 세션과 공유되지 않는다.

PGA의 주요 구성 요소

  • Sort Area:
    • 목적: SQL 쿼리에서 발생하는 정렬 작업을 수행하는 데 필요한 메모리 영역이다. 예를 들어, ORDER BY나 GROUP BY 절이 포함된 쿼리에서 사용된다.
  • Session Information:
    • 목적: 각 세션의 상태 정보와 데이터를 저장한다. 예를 들어, 세션별로 실행된 SQL 문이나 커서 정보가 저장된다.
  • Private SQL Area:
    • 목적: 세션에서 실행되는 SQL의 실행 계획과 바인딩 정보를 저장하는 메모리 영역이다. 이는 세션의 독립적인 메모리 영역이므로 다른 세션과 공유되지 않는다.

 

PGA 설정 예시

  • PGA 자동 메모리 관리 (Automatic Memory Management, AMM)
sql
ALTER SYSTEM SET MEMORY_TARGET = 4G;
  • 이 명령은 SGA와 PGA의 크기를 자동으로 조정한다
  • PGA의 크기는 MEMORY_TARGET을 설정하면 Oracle이 자동으로 조정한다. MEMORY_TARGET이 설정되면 SGA와 PGA가 자동으로 관리된다.
  • PGA 크기 설정
sql
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 1G;
  • 이 명령은 PGA의 크기를 1GB로 설정한다.
  • 수동으로 PGA의 크기를 설정하려면 PGA_AGGREGATE_TARGET을 사용한다.

PGA 사용 확인

PGA 사용 상태는 v$pgastat 뷰를 통해 확인할 수 있다.

sql
SELECT * FROM v$pgastat;

이 쿼리는 PGA 메모리의 사용량 및 통계를 보여준다.

 

3. SGA와 PGA의 차이점

특성SGA (System Global Area)PGA (Program Global Area)
메모리 할당 여러 프로세스가 공유 각 세션별로 독립적인 메모리 할당
주요 목적 데이터베이스 인스턴스에서 여러 프로세스 간 공유 데이터 저장 세션별 실행 정보 및 커서 저장
주요 구성 요소 Database Buffer Cache, Redo Log Buffer, Shared Pool, Large Pool, Java Pool 등 Sort Area, Session Information, Private SQL Area 등
메모리 크기 설정 SGA_TARGET, SGA_MAX_SIZE 사용 PGA_AGGREGATE_TARGET 사용
관리 방법 SGA는 일반적으로 수동 설정하거나 자동 메모리 관리 사용 PGA는 수동으로 설정하거나 자동 메모리 관리 사용

 

4. SGA와 PGA 관리 및 성능 최적화

  • 메모리 최적화: SGA와 PGA 크기를 적절히 설정하여, 메모리 리소스를 효율적으로 활용하고 성능을 최적화할 수 있다. 예를 들어, SGA가 너무 작으면 데이터베이스 캐시가 제대로 동작하지 않아 성능이 저하될 수 있다. 반대로, 너무 크면 다른 시스템 리소스를 압박할 수 있다.
  • 자동 메모리 관리: MEMORY_TARGET을 설정하여 SGA와 PGA를 자동으로 관리하면, 메모리 할당과 조정이 자동으로 이루어져 관리가 편리하다.

 

결론

  • SGA는 데이터베이스 인스턴스에서 모든 세션과 프로세스 간에 공유되는 메모리 영역으로, 데이터와 명령어 캐시를 저장한다.
  • PGA는 각 세션에 의해 사용되는 메모리 영역으로, 세션의 실행 정보와 SQL 상태를 저장한다.
  • 두 영역은 서로 다른 목적을 가지고 있으며, 메모리 리소스를 효율적으로 관리하기 위해 적절한 설정과 관리를 필요로 한다.
반응형

'DB' 카테고리의 다른 글

[Database] shared memory 정리하는 법  (0) 2025.04.17
[Database] Oracle Shared memory 사용률 확인  (0) 2025.04.17
[Database] shared memory 란?  (1) 2025.03.19
[Database] UNDO, REDO 란?  (0) 2025.03.19
[Database] SYSDBA 란?  (0) 2025.03.19