SGA
- SGA는 한 오라클의 인스턴스에 대한 데이터와 제어 정보를 가지는 공유 메모리 영역입니다. SGA와 오라클 백그라운드 프로세스가 오라클 인스턴스를 구축합니다.
- 오라클 인스턴스가 시작될 때 SGA를 할당하고 인스턴스가 종료하면 할당을 해제합니다. 각 인스턴스는 고유 SGA를 가집니다.
- 오라클 서버를 동시에 사용하고 있는 사용자는 SGA의 데이터를 공유합니다. 전체 SGA를 실제 메모리 크기가 허용하는 범위에서 가장 크게 잡으면 디스크 I/O를 줄이고 메모리에 가능한 많은 데이터를 저장할 수 있으므로 최적의 성능을 낼 수 있습니다.
- SGA크기는 오라클 내부에서 자동적으로 관리될 수 있습니다.
이 SGA에서 저장된 정보는 데이터베이스 버퍼, 리두 로그 버퍼, 공유 풀 같은 여러 형태의 메모리 구조로 나누어집니다.
데이터베이스 버퍼(database buffer cache)
- SGA 의 데이터베이스 버퍼는 가장 최근에 사용된 데이터 블럭을 저장합니다.
- 이 버퍼는 아직까지 디스크에 완전히 쓰여지지 않는 수정된 데이터를 보유할 수도 있습니다. LRU 알고리즘에 의하여 가장 오래전에 사용된 것은 디스크에 저장하고 메모리에는 가장 최근에 사용된 데이터를 저장 하므로써, 디스크 입출력이 줄어 들고, 따라서 데이터베이스 시스템의 성능은 증가 됩니다.
인스턴스와 SGA 가 생성될 때, 인스턴스가 시작시에 명시된 크기의 데이터베이스 버퍼 들이 만들어 집니다. 이 버퍼들은 인스턴스가 남아 있는 한 계속 존재합니다.
리두 로그 버퍼(redo log buffer)
SGA의 리두 로그 버퍼는 데이터베이스에 가해진 변화를 기록하는 변경 항목을 저장 합니다. 리두 로그 버퍼에 저장된 리두 항목들은 데이터베이스 복구에 사용되는 온라인 리두 로그 파일에 저장됩니다.
공유 풀(shared pool)
- 공유 풀은 공유 SQL 영역과 같은 공유 메모리 구조를 포함하는 SGA에 있는 한 구역으로, library cache, dictionary cache, result cache 등을 포함하고 있습니다.
- 이 중 library cache는 shared SQL area, private SQL area, PL/SQL procedure와 package들, lock 등과 같은 제어 구조 들로 나뉘어 지는데, 이 중 shared SQL area는 하나의 데이터베이스에 행해지는 모든 SQL 문을 처리하기 위하여 사용됩니다. 이 영역에는 SQL 문장을 실행하기 위해 그 문장과 관련된 실행 계획과 구문분석 정보가 들어 있고, 다수의 애플리케이션에 의해 재사용됩니다.
Result cache는 SQL의 query 결과나 PL/SQL function의 결과를 caching시킬 수 있는 영역으로, database buffer cache가 물리적인 데이터 블록 자체를 cache시키는 것과 차이가 있습니다. 따라서 이를 활용하는 경우, 월등한 SQL 성능 향상을 꾀할 수 있습니다.
Large Pool
Larger pool은 선택적인 메모리 영역으로, shared server나 XA interface를 위한 세션 메모리 영역, I/O 서버 프로세스, 백업이나 restore 오퍼레이션을 위해 사용될 수 있습니다.
Java Pool
JVM 내의 자바 코드나 데이터를 위한 서버 메모리로 사용될 수 있는 메모리 영역입니다.
Streams Pool
Oracle Streams에 의해서만 사용되는 메모리 영역으로, buffered queue 메시지를 저장하며, 이는 Oracle Streams의 캡쳐 프로세스와 적용(apply) 프로세스에 의해 사용됩니다.