SGA PGA 간단한 정리
출처: http://doracle.tistory.com/5?srchid=BR1http%3A%2F%2Fdoracle.tistory.com%2F5
SGA Memory = Shared Pool + Data Buffer Cache + Redo LogBuffer
+ Large Pool + Java Pool + Streams Pool
"oracle 서버" 를 동시에 여러명이 접속이 가능 할 것이다. 그 모든 접속자들이 공유하는 메모리 구조이다.
즉 디스크 I/O를 줄이기위해서 이용되는 메모리라고 생각해도 좋을 듯 싶다.
sga를 구성요소에 대해서 알아보겠다.
1. Shared Pool
shared pool (공유풀) 에 접급해 보자 공유 되는 풀이란다....ㅋ
문장을 실행하기 위해 문장의 실행계획 구문분석이 저장되어 있다. 왜?? 디스크 i/o를 줄이기 위해...
DB에서 처리하는 모든SQL문을 처리하는 곳이다.
크게 Share SQL Area(공유SQL영역) 와 Data dictionary Cache(데이터사전캐시)로 나눠진다.
- Library Cache ( = Shared SQL Area + Shared PL/SQL Area) 은
Shared SQL 영역 : SQL문장에 대한 실행계획과 파싱 트리를 저장하고 공유 합니다.
동일한 문장이 다음 번에 실행되면 Shared SQL 영역에 저장되어 있는 실행계획과 파싱
트리를 그대로 이용하기 때문에 SQL 문장의 처리 속도는 향상 됩니다.
Shared PL/SQL 영역 : 가장 최근에 실행한 PL/SQL 문장을 저장하고 공유 합니다.
파싱 및 컴파일 된 프로그램 및 프로시져(함수, 패키지, 트리거)가 저장 됩니다.
동일한 문장이 다음번에 실행되면 Shared SQL 영역에 저장되어 있는 실행계획과 파싱
트리를 그대로 이용하기 때문에 SQL 문장의 처리 속도는 향상 됩니다.
- Data dictionary Cache
테이블, 컬럼, 사용자 이름, 사용 권한 같은 가장 최근에 사용된 데이터 사전의 정보를 저장하고 있습니다.
구문 분석 단계에서 서버 프로세스는 SQL문에 지정된 오브젝트 이름을 찾아내고 접근 권한을 검증하기 위해 Dictionary Cache의 정보를 찾아봅니다
2. Database Buffer Cache
DML문일 때 사용되는 것 책보고 확인하자.
Datafile들로부터 읽은 Data Block의 복사본을 담고 있는 부분으로 Oracle Instance에 접속한 모든 User Process는 Database Buffer Cache에 대한 Access를 공유합니다 또 디스크에 완전히 쓰여지지 않은 수정된 Data도 보유 할 수 있다. LRU가 쓰여지며 DBWR에 의해 관리된다.
Organization, Size, Multiple 다른 문서 참조
3. Redo Log Buffer
DB에서 일어난 모든 변화를 저장하는 메모리 공간. LGWR에 의해 Redo Log File에 저장된다.
Redo 정보는 항상 실제 변경 작업보다 먼저 보관되어야 복구가 가능해집니다. 그래서 트랜잭션을 수행하는 프로세스는 우선 자신의 메모리 영역 내에서 수행하고자 하는 작업에 대한 Redo 레코드를 만들며, 이를 먼저 로그 버퍼에 기록하고 난 후 실제 버퍼블록에도 Redo 레코드에 남긴 내용을 적용하게 됩니다.
4. Large Pool
Oracle 백업 및 복원 작업에 대한 대용량 메모리 할당, I/O 서버 프로세스 및 다중 스레드 서버와 Oracle XA에 대한 세션 메모리를 제공하는 SGA의 선택적인 영역이다.
5. Stream Pool
Oracle Streams가 사용하는 것.
6. Java Pool
자바로 작성된 프로그램 사용할 때 실행 계획을 저장하는 영역
PGA
Program Global Areas
SGA는 각 사용자가 DB에 접속하면 공유하는 메모리라고 말했다.
그와 반대로 PGA는 DB에 접속하면 Server process가 생성되는데 이 프로세스의 대한 Data와 제어정보를 저장하는 메모리 영역이라 생각하면 된다.