반응형
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 |