관리 메뉴

ARTIFEX ;)

SGA (System Global Area) 본문

# Other IT Something/DB_Oracle

SGA (System Global Area)

Artifex_Ethan_ 2017. 7. 27. 18:55
반응형


SGA(System Global Area)



쉽게 말해 SGA 오라클 서버의 메모리 영역이라고 설명한다


Oracle 인스턴스에 대한 데이터와 제어 정보를 가지는 공유 메모리 영역의 집합이며,

데이터를 읽거나 변경하기 위해서 사용 되는 공용 메모리 영역이다.


SGA 


- 모든 서버 백그라운드 프로세스에서 공유한다.


- Oracle 인스턴스가 시작될 할당하며, 인스턴스가 사라질 없어진다.


  • 인스턴스에 대한 컨트롤 정보를 저장하는 메모리 영역이다.















 

사용 목적의 따라 오라클 파라미터 파일(init.ora) 조정으로 SGA 부분의 크기를 조절 있다. (Parameter 파일에 의해 관리됨.)



# initSID.ora 파일을 열어보면 

large_pool_size=8388608

shared_pool_size=50331648 이렇게 사이즈가 지정되어 있다.


Oracle9i부터 오라클 서버의 종료 없이 SGA 구성을 SGA_MAX_SIZE 파라미터 범위 내에서만 각각의 크기를 동적으로 변경이 가능하다.


Oracle 서버를 동시에 사용하고 있는 사용자는 시스템 글로벌 영역 (SGA) 데이터를 공유한다.


전체 SGA 실제 메모리 크기가 허용하는 범위에서 가장 크게 잡으면 디스크 I/O 줄이고 메모리에 가능한 많은 데이터를 저장할 있으므로 최적의 성능을 있다.




공유 (Shared Pool)


- 사용자간 공유할 있는 다양한 구성요소를 캐시에 저장한다.

- * Library Cache 데이터 사전 캐시(Data Dictionary Cache) 구성이 되어있다.

- 하나의 DB 행해지는 모든 SQL문을 처리하기 위해 사용된다.

- 문장을 실행하기 위해 문장과 관련된 실행 계획과 구문분석 정보가 들어 있다.

- 사이즈는 SHARED_POOL_SIZE 파라미터 값으로 결정한다.




* Library Cache = 최근에 사용된 SQL, PL/SQL 관한 정보를 저장.

* Data Dictionary Cache = DB 최근에 사용된 정의어들의 집합.




데이터베이스 버퍼캐쉬(DataBase Buffer Cache)


읽기 일관성을 만족시키기 위해 동적으로 생성된 블록 이미지를 보관하는 SGA 일부이다.

데이터 파일에서 읽은 데이터 블록 복사본을 보관한다.


가장 최근에 사용된 데이터를 저장하는 메모리 공간이다.

버퍼는 아직까지 디스크에 완전하게 쓰여지지 않는 수정된 데이터를 보유할 수도 있다.


LRU 알고리즘에 의해 가장 오래전에 사용된 것은 디스크에 저장하고 

메모리에는 가장 최근에 사용된 데이터를 저장한다

그러므로디스크 I/O 줄어든고, DB 시스템의 성능 증가효과를 있다.


== 가장 오래된 데이터 -> 디스크 

== 가장 최근의 데이터 -> 메모리


Oracle 8i까지는 DB_BLOCK_SIZE DB_BLOCK_BUFFERS 곱해서 데이터베이스 캐쉬의 크기를 결정 했었다

Oracle 9i부터는 DB_BLOCK_BUFFERS Deprecated 시키고, DB_CACHE_SIZE 라는 파라미터가 Oracle 9i 새롭게 도입이 되었다

(DB_BLOCK_SIZE : 데이터베이스 버퍼 캐쉬 내의 블록의 크기)



New Buffer Cache Sizing Parameters


   9i부터는  다음의 세 가지 파라미터가 추가 되었다.

  - DB_CACHE_SIZE : 디폴트 버퍼 캐시, 반드시 존재해야 하며, 0으로 설정할 수 없다.

  - DB_KEEP_CACHE_SIZE : Keep Buffer Cache의 크기, 재활용될 가능성이 높은 블록을 고정적으로 저장하는데 사용한다.

  - DB_RECYCLE_CACHE_SIZE : 재활용 버퍼 캐시 크기, 재활용 될 가능성이 낮은 블록을 즉시 제거하는데 사용한다.


 이전 버전과 다른 점은 이전 버전의 경우 각각의 파라미터

(DB_BLOCK_BUFFERS, BUFFER_POOL_KEEP, BUFFER_POOL_RECYCLE)에 정의된 값들이

 BUFFER 개 수(즉, 실제 메모리 크기를 구하려면 DB_BLOCK_SIZE를 곱했어야)였는데 반해 이제는 구체적인 메모리 크기를 지정 한다.

  Oracle 9i부터는 Multiple Block Size(2K, 4K, 8K, 16K, 32K)를 지원한다.

  DB_BLOCK_SIZE에 의해 정해진 BLOCK SIZE가 기본 BLOCK SIZE가 된다. (SYSTEM TABLESPACE는 이 BLOCK SIZE를 이용한다.)


  Oracle 9i에 새로 생긴 파라미터는 아래와 같이 ALTER SYSTEM 명령으로 동적변경이 가능하다.


 

SQL> ALTER SYSTEM SET DB_CACHE_SIZE=96M;

SQL> ALTER SYSTEM SET DB_KEEP_CACHE_SIZE=16M;

SQL> ALTER SYSTEM SET DB_RECYCLE_CACHE_SIZE=16M;  



SQL> alter system set large_pool_size=16M scope=both 




리두로그 버퍼(Redo Log Buffer) 


- DB에서 일어난 모든 변화를 저장하는 메모리 영역이다.

- DB에서 발생한 모든 변화는 LGWR 의해 *리두 로그파일 저장한다.

- 리두 로그 버퍼의 크기는 Oracle 파라미터 LOG_BUFFER에서 지정한다

* 리두 로그 버퍼는 DB 변경사항정보를 유지하는 SGA 존재하는 순환 버퍼이다.


세가지 LARGE POOL JAVA POOL 구성되어 있다.




반응형

'# Other IT Something > DB_Oracle' 카테고리의 다른 글

Oracle 11g AMM  (0) 2017.07.31
Oracle 10g - ASMM 자동 공유 메모리관리  (0) 2017.07.31
# 테이블 - 테이블 스페이스  (0) 2017.01.03
# 데이터베이스 설계[간략]  (0) 2016.10.23