빠요 2021. 2. 4. 22:35

 

Oracle DBMS도 결국 하나의 프로그램으로 실행이되면 프로세스가 생성되고 메모리가 할당된다.

이러한 메모리와 프로세스를 합쳐서 Instance라고 부르고 Instance가 기동될때 각종 프로세스와 필수 메모리 영역이 할당된다.

 

SGA는 서버프로세스들이 쿼리를 수행하기 위해 공유해서 사용하는 메모리공간이다.

SGA의 영역안에는 필수영역인 Shared Pool, Database Buffer Cache, Rede log buffer와 선택적 영역인 Large Pool, Java Pool, Streams Pool이 있다. (10g 기준)

--SGA영역에 설정된 메모리 확인
SELECT * FROM v$SGAINFO;

 

[SHOW SGA 항목]

Total System Global Area: SGA전체크기

Fixed Size: SGA관리정보가 저장된 고정영역 크기

Variable Size: Shared Pool, Large Pool, Java Pool, Streams Pool 을 합친 크기

Database Buffers: Database Buffer Cache 크기

Redo Buffers: Redo lob Buffer크기

※ 「오라클 아키텍처 입문」 참조

 

[Shared pool]

- Library Cache: Soft parsing에 사용되는 공간, 이미 수행되었던 쿼리나 실행계획등이 저장

                     .LRU알고리즘으로 관리

                        * LRU알고리즘: Least Recently Used, 가장 최근에 사용한 것을 남겨두고 오랫동안 사용되지 않을것을 버림

 

- Data Dictionary Cache: 주요 Dictionary들이 저장 (구문분석이나 옵티마이저가 실행계획을 세울 때 사용)

 

Shared pool의 크기는 SHARED_POOL_SIZE 파라미터로 설정

(library cache나 dictionary cache 사이즈는 자동으로 관리)

--shared pool size확인
show parameter shared_pool_size;
select * from v$sgainfo;
등등

--shared pool size변경
alter system set shared_pool_size=100m;

[Database Buffer Cache]

SQL이 실행하는 데이터를 보관하고 작업을 수행하는 공간

수행하는 테이블, 오브젝트가 DB Buffer cache에 존재하지 않는다면 서버프로세스가 하드디스크에서 데이터 블록을 찾아 복사

데이터파일에서 직접 작업하면 속도가 느리기때문에 속도가 빠른 메모리영역에 데이터를 복사해와서 작업을 수행하고 수시로 하드디스크에 파일로 저장

LRU알고리즘으로 관리

 

DB Buffer Cache사이즈는 DB_CACHE_SIZE 파라미터로 설정

--Database Buffer Cache size조회
show parameter db_cache_size;
select * from v$saginfo;

--v$sga의 database buffers = v$sgastat의 buffer_cache
select * from v$sga;
select * from v$sgastat;
등등

--DB Buffer Cache size변경
alter system set db_cache_size=100m;

 

[Rede log Buffer]

변경사항 기록, 복구용

DML, DDL이 발생할 경우 Redo log buffer에 기록 후 LGWR이 Redo log buffer내용을 Redo log file에 기록

 

Redo log buffer사이즈는 LOG_BUFFER파라미터로 설정

정적 파라미터로 DB재기동 필요

 

# 그래뉼 (Granule)

오라클의 메모리 할당단위

메모리를 할당할 때 1MB씩 할당하는 것이 아니라 1그래뉼 단위로 할당

 

SGA의 총 크기는 SGA_MAX_SIZE파라미터로 제한

9i )

SGA_MAX_SIZE가 128MB 이하: 1그래뉼 = 4MB

SGA_MAX_SIZE가 128MB 초과: 1그래뉼 = 16MB

 

10g )

SGA_MAX_SIZE가 1G 이하: 1그래뉼 = 4MB

SGA_MAX_SIZE가 1G 초과: 1그래뉼 = 16MB

 

 

메모리가 그래뉼 단위로 관리되므로 shared_pool_size를 10m, 9m로 변경해도 12m가 할당됨

(10g 기준 SGA 의 전체 크기가 1G 이하: 1그래뉼 = 4MB)

 

※ 「오라클 백업과 복구」 참조