PGA
SGA란 System Global Area의 약자로, DB 내 하나만 존재하면서 모든 세션이 공유하는 메모리 공간이다.
SGA란 오라클에서 이를 지칭하는 방식이고 Mysql은 Global Memory, PG에서는 Shared Memory라고 지칭한다.
Shared Pool : 데이터베이스의 성능 최적화를 위한 핵심 컴포넌트
- Library Cache: SQL문과 PL/SQL 프로그램의 실행 계획 저장
- Data Dictionary Cache: 테이블, 인덱스 등의 메타데이터 저장
- Result Cache: 자주 사용되는 쿼리 결과 캐싱
Buffer Cache : 데이터 블록을 캐시하는 영역
- 데이터 파일에서 읽어온 데이터 블록 저장
- DEFAULT, KEEP, RECYCLE 등 여러 풀로 구성
- LRU 알고리즘으로 관리
Redo Buffer : 데이터베이스 변경사항을 임시 저장
- 데이터베이스 변경사항 임시 저장
- LGWR 프로세스가 주기적으로 디스크에 기록
- 장애 복구에 필수적인 요소
Java Pool : Java 관련 작업을 위한 메모리 영역
- Java 코드 실행을 위한 메모리
- Java 클래스 정의와 Java 객체 저장
Large Pool : 대규모 작업을 위한 특수 메모리 영역
- 백업/복구 작업용 메모리
- 병렬 처리 작업 지원
- 공유 서버 프로세스 지원
Streams Pool : 데이터 스트림 처리를 위한 영역
- Oracle Streams 프로세스 지원
- 메시지 큐 관리
PGA
PGA(Process Global Area)는 Oracle Database에서 각 데이터베이스 세션별로 할당되는 독립적인 메모리 영역이다. 다른 DBMS에서는 MySQL의 Local Memory, PostgreSQL의 Backend Memory라는 용어로 사용된다.
각 서버 프로세스와 백그라운드 프로세스는 자신만의 PGA를 가지며, 이를 통해 독립적인 메모리 작업을 수행한다.
SQL Work Areas : SQL 문 처리를 위한 작업 영역
- Sort Area : ORDER BY, GROUP BY 등의 정렬 작업 수행 및 인덱스 생성 시 정렬 작업
- Hash Area : 해시 조인 작업 수행 및 해시 테이블 생성 및 관리
- Bitmap Merge Area : 비트맵 인덱스 관련 작업 처리 및 병렬 쿼리 실행 시 활용
Private SQL Area : SQL 문 처리와 관련된 정보를 저장하는 영역
- Persistent Area : 바인드 변수 정보 저장 및 실행 계획 정보 유지
- Runtime Area : SQL 실행 중 발생하는 런타임 정보 저장 및 커서의 상태 정보 관리
Session Memory : 세션 상태 정보 저장 및 세션 관련 데이터 보관
Database Smart Flash Cache
Buffer Cache의 확장 메모리로 작동하는 특수 영역
- Buffer Cache의 확장
- SSD나 플래시 디스크 사용
사용자 요청 처리 프로세스 흐름
SELECT 쿼리 실행 흐름
SELECT 쿼리가 실행되면 먼저 Server Process가 생성되고, 이 프로세스는 SGA와 PGA 두 메모리 영역을 모두 활용하게 된다. SGA에서는 Shared Pool을 통해 SQL 실행계획을 확인하고, 이미 캐시된 실행계획이 있다면 재사용한다. 그 다음 Buffer Cache에서 필요한 데이터 블록을 검색하며, 데이터가 없는 경우에만 디스크에서 읽어온다.
동시에 PGA에서는 각 세션별로 독립적인 메모리 공간이 할당된다. Sort Area에서는 ORDER BY나 GROUP BY 같은 정렬 작업을 수행하고, Session Memory는 현재 실행 중인 쿼리의 상태 정보를 관리한다.
DML(INSERT/UPDATE/DELETE) 실행 흐름
DML 쿼리(INSERT, UPDATE, DELETE) 실행 시에도 Server Process는 SGA와 PGA를 모두 활용한다. SGA의 Buffer Cache에서는 실제 데이터 블록의 변경이 이루어지고, 이 변경사항은 즉시 Redo Buffer에 기록된다.
PGA에서는 Private SQL Area를 통해 변경될 데이터의 임시 저장 및 관리가 이루어지고, Session Memory에서는 현재 트랜잭션의 상태 정보를 관리한다. 변경사항은 LGWR(Log Writer)에 의해 Redo Log File에 기록되고, DBWR(Database Writer)에 의해 실제 Data File에 기록된다.
참고
SQL Tuning Guide
This chapter explains how database processes DDL statements to create objects, DML to modify data, and queries to retrieve data.
docs.oracle.com
SGA vs PGA (in Oracle)
현재 DB 스터디의 일환으로 '친절한 SQL 튜닝'을 한번 더 읽고 있다. 이번 파트는 소트 머지 조인 + 해시 조인 인데, 개인적으로 해당 서적을 이미 1회독한 상황이라 두 조인이 대략적으로 어떻게
one-armed-boy.tistory.com