[Oracle 메모리 구조]
메모리영역은 크게 시스템 공유 메모리 영역 + 프로세스 전용 메모리 영역으로 구분됨
○ Instance 영역
1) SGA (System Global Area)
- 모든 사용자가 데이터를 공유하는 거대한 공용 메모리 공간
- 운영체제가 제공해준 것으로 여러 프로세스가 동시에 엑세스할 수 있는 메모리 영역
2) Background Process
- SGA와 물리 디스크를 연결하는 오라클 자체 내장 일꾼들
○ Instance 외부 영역
1) PGA (Program Global Area)
- 유저가 접속 할때마다 개별적으로 할당되는 유저 전용 독립 작업 공간
- 인스턴스 영역에 포함되지 않으며, 다른 유저와 메모리를 공유하지 않음
[SGA영역 필수 3대 요소]

1) Shared Pool
- 유저가 보낸 SQL 문을 분석(Parse)하고 최적의 실행 경로(실행 계획)를 저장하는 공간
- 똑같은 SQL이 들어오면 분석 과정을 생략하고 즉시 실행(Soft Parse)하여 성능을 높임
- 라이브러리 캐시, 데이터 딕셔너리 캐시로 구성됨
① Library Cache : 최근 수행한 SQL 문장의 컴파일된 형태와 실행 계획을 저장
② Data Dictionary Cache : 실행계획을 세우기 위해 테이블, 인덱스, 컬럼, 권한 정보 등 메타데이터를 저장
2) Database Buffer Cache
- 디스크(Data File)에서 읽어온 데이터 블록들을 임시로 보관하고 가공하는 메모리 공간
- 데이터 조회 시 디스크로 가기 전 이곳을 가장 먼저 뒤지며, 자주 쓰는 데이터가 여기 많을수록 디스크 I/O를 하지 않고 메모리에서 바로 읽게 되어 속도가 빨라짐
- 디스크에서 읽을 떄도 버퍼 캐시에 먼저 적재한 후, 메모리 상에서 데이터를 읽어옴
* Database Buffer Cache 내 Block 상태
① Free Block : M/D 일치
② Pinned Block : 현재 작업 중 (Lock)
③ Dirty Block : M/D 불일치, DBWn프로세스로 디스크로 밀어내야 Free 블록으로 돌아갈 수 있음
3) Redo Log Buffer
- DB Buffer Cache에 가해지는 모든 변경 이력(History)을 디스크로 저장하기 전에 임시로 기록하는 메모리 공간
- 로그를 건마다 기록하는 것보다 메모리에 변경사항을 모아서 LGWR프로세스가 한번에 기록하는 것이 성능을 극대화함
- DML, DDL 발생 시 해당 버퍼에 변경 내용을 먼저 기록 (장애 발생 시 버퍼 내용을 보고 복구 가능)
[PGA 구성]
- User Process 요청이 들어오면 Server Process가 생성되고, 이 Server Process가 독점적으로 사용하는 임시 작업 공간인 PGA 가 할당

1) Session Memory
- 세션의 변수(로그인 정보) 및 세션과 관련된 기타 보안/상태 정보를 보관하기 위해 할당되는 메모리
2) Cursor Information
- SQL 파싱 정보가 저장되어 있는 주소
3) SQL Work Area
- 메모리 집약적인 연산자들을 지원하기 위해 할당되는 공간, 해당 영역이 클수록 메모리 소비량이 높아지는 대신, 처리 성능이 크게 향상될 수 있음
① Sort Area : ORDER BY, GROUP BY 같은 정렬 연산 처리
② Hash Area : 테이블 간 해시 조인시 해시 테이블 조인
③ Bitmap Merge/Create Area : 비트맵 인덱스를 생성하고 병합하는 연산에 사용
[Background Process]

1) LGWR (Log Writer)
- 유저가 COMMIT을 누르거나 Redo Log Buffer가 1/3 이상 차면, 3초마다 Redo Log Buffer의 변경 로그를 디스크의 Online Redo Log File에 광속으로 저장
2) DBWn (Database Writer)
- Database Buffer Cache에서 수정된 데이터 블록(Dirty Buffer)들을 주기적으로 디스크의 Data File에 일괄 기록
- 성능을 위해 커밋 시점이 아닌 비동기식으로 작동
- DBWR, DBWO 라고 쓰기도 함
3) CKPT (Checkpoint Process)
- 디스크와 메모리의 데이터 동기화 시점(Checkpoint)을 제어하고, 동기화 정보를 Control File과 Data File 헤더에 기록하여 동기화 상태를 보장
- DBWn과 LGWR의 기동 시기가 서로 달라서 발생하는 메모리와 디스크 간의 데이터 불일치를 해결하고 동기화하기 위해 작동
4) PMON (Process Monitor)
- 비정상적으로 종료된 유저 프로세스를 감시
- 유저가 급작스럽게 접속을 끊으면, 그 유저가 잡고 있던 PGA 메모리를 회수하고 트랜잭션이 걸려있던 락(Lock)을 깨끗하게 청소
5) SMON (System Monitor)
- 오라클이 비정상 종료되어 인스턴스 장애가 생겼을 때, Redo Log File에 있는 내용으로 데이터 파일을 복구
- 커밋되었으나 디스크에 안 쓰인 데이터는 복구하고, 커밋되지 않은 트랜잭션은 Roll Back하며 디스크의 빈 공간을 정리
'IT' 카테고리의 다른 글
| [Oracle] SQL튜닝 - 2: Optimizer (0) | 2026.06.03 |
|---|---|
| [Oracle] SQL튜닝 - 1: SQL 처리 절차 (0) | 2026.05.31 |
| [Oracle] Oracle Database Server Architecture - 2: 디스크영역 (0) | 2026.05.31 |
| [Oracle] Oracle Database Server Architecture - 1: 요약 (0) | 2026.05.30 |
| [IT 용어] - 1: WEB3 (1) | 2026.05.16 |