-
Oracle의 메모리 구조 - SGA(시스템 글로벌 영역)Database 2008. 9. 1. 16:22반응형
SGA(System Global Area ; 시스템 글로벌 영역)
- 오라클 서버의 메모리 영역의 하나로 모든 접속자가 공유하는 메모리 영역
- 파라미터 파일(initSID.ora)의 파라미터(large_pool_size, shared_pool_size 등)를 변경하여 지정할 수 있다.
- 9i 버전부터 서버의 종료 없이 SGA_MAX_SIZE 파라미터 값 범위 내에서 SGA 구성을 동적으로 변경 가능
- 전체 SGA를 실제 메모리 크기가 허용하는 범위에서 가장 크게 잡으면 디스크 I/O를 줄이고 메모리에 가능한 많은 데이터를 저장할 수 있어 최적의 성능을 낼 수 있다.
- SGA는 공유풀(Shared Pool), 데이터베이스 버퍼캐쉬(Database Buffer Cache), 리두로그 버퍼(Redo Log Buffer), Large Pool, Java Pool, Stream Pool 로 구성된다.
1. Shared Pool
- 문장을 실행하기 위해 문장의 실행계획 구문분석이 저장되어 있다.
- DB에서 처리하는 모든SQL문을 처리하는 곳이다.
- Library Cache(공유SQL영역) 와 Data dictionary Cache(데이터사전캐시)로 나눠진다.
- SHARED_POOL_SIZE 파라미터 값으로 결정된다.
① Library Cache
- Shared SQL Area + Shared PL/SQL Area 로 구분된다.
- Shared SQL 영역 : SQL문장에 대한 실행계획과 파싱 트리를 저장하고 공유.
- Shared PL/SQL 영역 : 가장 최근에 실행한 PL/SQL 문장을 저장하고 공유.
파싱 및 컴파일 된 프로그램 및 프로시져(함수, 패키지, 트리거)가 저장 된다.
- 동일한 문장이 다음번에 실행되면 Shared SQL 영역에 저장되어 있는 실행계획과 파싱 트리를 그대로 이용하기 때문에 SQL 문장의 처리 속도는 향상 된다.② Data dictionary Cache
- 테이블, 컬럼, 사용자 이름, 사용 권한 같은 가장 최근에 사용된 데이터 사전의 정보를 저장하고 있다.
- 구문 분석 단계에서 서버 프로세스는 SQL문에 지정된 오브젝트 이름을 찾아내고 접근 권한을 검증하기 위해 Dictionary Cache의 정보를 찾는다2. Database Buffer Cache
- DML 작업을 할때 디스크의 데이터를 메모리에 올리는 영역(I/O단위는 Data Block).
- 디스크에 쓰여지지 않은 수정된 데이터를 보유할 수 있다.
- LRU(Least Recently Used) 알고리즘에 의하여 가장 오래전에 사용된 것을 디스크에 저장하고 메모리에는 가장 최근에 사용된 데이터를 저장한다.
- Oracle Instance에 접속한 모든 User Process는 Database Buffer Cache에 대한 Access를 공유.
- DBWR 백그라운드 프로세스에 의해서 변경된 내용은 디스크로 저장.
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
- 자바로 작성된 프로그램 사용할 때 실행 계획을 저장하는 영역.반응형