Oracle에서 shared memory는 데이터베이스 인스턴스와 클라이언트 간의 효율적인 데이터 전송을 위해 사용하는 메모리 영역이다. 이 메모리는 데이터베이스 인스턴스가 여러 프로세스와 데이터를 공유할 수 있게 해주며, 전체 시스템의 성능을 최적화하는 데 중요한 역할을 한다.
Oracle에서 공유 메모리는 **System Global Area (SGA)**와 **Program Global Area (PGA)**로 나뉘며, SGA가 바로 공유 메모리 영역이다.
1. Shared Memory - SGA (System Global Area)
SGA는 Oracle 인스턴스의 모든 데이터베이스 프로세스와 클라이언트가 공유하는 메모리 영역이다. 이 메모리는 여러 프로세스 간에 데이터를 효율적으로 공유하기 위해 사용된다. SGA는 데이터베이스 인스턴스를 시작할 때 할당되며, 데이터베이스 서버에서 실행 중인 모든 세션 간에 공유된다.
SGA는 여러 가지 컴포넌트로 구성된다. 주요 컴포넌트는 다음과 같다:
- Database Buffer Cache: 데이터 파일에서 읽은 데이터를 캐시로 저장하여 데이터베이스 성능을 향상시킨다. 이 버퍼는 읽기 및 쓰기 작업을 최적화한다.
- Redo Log Buffer: 트랜잭션의 변경 사항을 기록하는 로그를 저장하는 버퍼이다. 이 버퍼는 시스템 충돌 후 복구 작업을 지원한다.
- Shared Pool: SQL 및 PL/SQL 코드, 데이터 딕셔너리 캐시 등을 저장하는 메모리 영역이다. 이 공간은 SQL 문장을 파싱하고 실행 계획을 캐시하는 데 사용된다.
- Large Pool: 백업 및 복구, 마운트 작업 등과 관련된 메모리 영역으로, 메모리 요구 사항이 많은 작업에 사용된다.
- Java Pool: Java 관련 작업을 처리하는 데 사용되는 메모리 영역이다.
2. Shared Memory - PGA (Program Global Area)
PGA는 각 사용자 프로세스에 의해 사용하는 메모리 영역이다. 이 메모리는 Oracle 인스턴스의 각 세션마다 할당되며, SGA와는 달리 각 세션에 독립적이다. PGA에는 세션의 실행 정보, 커서, 정렬 버퍼 등이 포함된다.
3. Shared Memory 구성 및 설정
SGA의 크기와 관련된 파라미터는 init.ora 또는 spfile 설정 파일에 설정된다. SGA의 크기를 설정하려면 SGA_TARGET 및 SGA_MAX_SIZE 파라미터를 사용한다.
- SGA_TARGET: SGA 크기의 목표 값을 설정한다. Oracle이 자동으로 메모리 관리하여, 사용 가능한 메모리를 SGA의 여러 부분에 동적으로 할당할 수 있다.
- SGA_MAX_SIZE: SGA의 최대 크기를 설정한다. 이 값은 SGA_TARGET보다 크거나 같아야 한다.
4. SGA 설정 예시
- 자동 메모리 관리 사용 (Automatic Memory Management, AMM):
sql ALTER SYSTEM SET MEMORY_TARGET = 4G;
- SGA와 PGA의 크기를 자동으로 조정하려면 MEMORY_TARGET 파라미터를 설정할 수 있다.
- SGA 크기 수동 설정:
sql ALTER SYSTEM SET SGA_TARGET = 2G; ALTER SYSTEM SET SGA_MAX_SIZE = 4G;
- SGA의 각 구성 요소를 수동으로 설정하려면 SGA_TARGET, SGA_MAX_SIZE 등을 사용할 수 있다.
- 구체적인 구성 요소 설정:
sql ALTER SYSTEM SET DB_CACHE_SIZE = 1G; ALTER SYSTEM SET SHARED_POOL_SIZE = 512M; ALTER SYSTEM SET LARGE_POOL_SIZE = 256M; 이 설정은 DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE를 각각 1GB, 512MB, 256MB로 설정한다.
- 각 SGA 구성 요소를 수동으로 설정하려면 다음과 같이 설정할 수 있다:
5. Shared Memory 사용 확인
SGA 및 PGA의 현재 사용 상태를 확인하려면 다음과 같은 SQL 명령어를 사용할 수 있다.
- SGA 사용량 확인:이 쿼리는 SGA의 각 구성 요소와 관련된 정보(크기, 상태 등)를 보여준다.
sql
SELECT * FROM v$sga;
- PGA 사용량 확인:v$pgastat 뷰는 PGA 메모리 사용 상태를 보여준다.
sql
SELECT * FROM v$pgastat;
6. Shared Memory 관련 로그 확인
- Oracle 로그 파일: 공유 메모리와 관련된 오류나 문제를 해결하려면 alert.log와 같은 Oracle 로그 파일을 확인할 수 있다. 로그 파일은 Oracle 설치 디렉토리의 alert.log에서 찾을 수 있으며, 시스템에서 발생한 오류 및 경고 메시지를 기록한다.
결론
Oracle의 Shared Memory는 성능 최적화와 메모리 관리의 중요한 부분이다. SGA는 여러 프로세스 간에 데이터를 공유하며, PGA는 각 세션의 독립적인 메모리 영역으로, 시스템 성능을 극대화하는 데 중요한 역할을 한다. SGA의 크기와 구성을 적절히 설정하여, Oracle 데이터베이스의 성능을 최적화할 수 있다.
'DB' 카테고리의 다른 글
[Database] Oracle Shared memory 사용률 확인 (0) | 2025.04.17 |
---|---|
[Database] PGA, SGA 란? (1) | 2025.03.19 |
[Database] UNDO, REDO 란? (0) | 2025.03.19 |
[Database] SYSDBA 란? (0) | 2025.03.19 |
[Database] Oracle, MySQL, PostgreSQL 암호화 사용 여부 확인 (0) | 2025.03.19 |