티스토리 뷰

ORACLE MEMORY STRUCTURE (오라클 메모리 구조)

 

ORACLE MEMORY STRUCTURE (오라클 메모리 구조)

SYSTEM GLOBAL AREA (SGA), PROGRAM GLOBAL AREA (PGA) : 물리적인 RAM 안에 생성된다

SGA : INSTANCE 별로 1개 생성, INSTANCE에 접속해서 사용자가 공유하는 메모리 공간, SQL 수행공간

PGA : 각 사용자의 서버프로세스 별로 1개씩 독립적으로 생성되는 공간

 

ORACLE INSTANCE 구조

 

ORACLE INSTANCE :

SGA 와 BACKGROUND PROCESS 로 구성되어있다.

ORACLE이 시작되면, RAM 안에 ORACLE DATABASE에 모든 프로세스가 공요할 수 있는 공간을 서버프로세스가 만든다.

ORACLE INSTANCE 생성의 궁극적인 이유는 성능과 안전성에 있다.

 

SGA 크기와 사용율 최적화가 DB 성능 좌우한다

SGA 할당 과정

DBA DB 접속 후 INSTANCE 시작 -> 서버 프로세스가 'STARTUP' SQL 문장 받아서, 초기화 파라미터(PFILE, SPLFILE) 설정 참조

-> OS 커널에게 공유메모리 할당 요청 -> OS 커널은 자신이 알고있는 OS 커널 파라미터 (SYSCTL.CONF 파일) 조회

-> 공유메모리 생성 및 세모포어 설정

 

 * 서버프로세스는 종료되어도 SGA가 종료 되지 않는 이유는?

-  SGA(공유메모리) 생성 요청은 서버프로세스가 하지만, 생성 후에는 OS 커널이 관리하기 때문이다

- OS 의 공유메모리를 서버에 접속하는 프로세스들이 함께 사용하는 공간

 * SGA 설정값은 파라미터 파일(PFILE, SPFILE)에 있는 SGA_MAX_SIZE 로 결정되고 후에 변경가능하다

 

SGA 관리 방법

- 여러개의 서버프로세스가 함께 사용하는 공간이므로 동시에 하나의 블록에 액세스하면 커널 패닉이 발생하므로 관리가 필요하다

 

SEMAPHORE (세마포어) : 깃발(FLAG) 의 의미. 어떤 자원의 현재 사용여부

상태 : SET & UNSET

프로세스는 메모리 블록 사용전에 세모포어 상태가 SET인지 UNSET인지 확인 먼저 한다.

세마포어는 한개씩 쓰지 않고 세트로 묶어서 여러개씩 사용한다.

세마포어 설정 파라미터

  SEMMSL : 세마포어 세트 당 세마포어 최대 갯수, 기본값 :100 이상 (PROCESS 변수 + 10)

  SEMMNI  : 세마포어 세트 최대 갯수, 권장값 : 100이상

  SEMMNS : 세마포어 최대 갯수

  SEMOPM : 초당 호출 (시스템 호출) 가능한 최대 세마포어 갯수, 기본값 = SEMMSL (세트당 갯수)

조회 방법 : ]$ ipcs -ls

 

OS 커널 파라미터

SHMMAX : 공유 메모리 (SGA)  세그먼트의 최대크기 ( BYTE단위). 기본값 : 32MB, 권장값 : 2GB

SHMALL : SGA 최대크기 ( 페이지 단위), 기본값 : 2097152 BYTES, 권장값 : 기본값보다 크게

SHMMIN : 단일 SGA 최소크기 (BYTE단위)

SHMSEG : 공유 메모리 세그먼트 최대 갯수

 

조회 방법 :

]# cat /proc/sys/kernel/shmmax

 

변경 방법 3가지 :

]# echo "2147483648" > /proc/sys/kernel/shmmax

]# sysctl -w kernel.shmmax=2447483648  (sysctl 명령어사용하여 변경하는 방법)

]# vi /etc/sysctl.conf (vi 에디터 사용 변수 값 추가)

 * 커널이 SGA를 생성할 때 파라미터 값들을 참조하지만 최소/최대 값을 정의 한것일 뿐 평소에 사용하는 기본값은 아니다.

 

 * 커널이 SGA 생성할 때 SHARED MEMORY 에 생성하는 3가지 방법

1. SGA 사용할 물리적 메모리가 충불할 경우 : 하나의 SEGMENT에 전체 SGA 할당

2. SGA 충분하지 않을 경우 : 연속된 여러 SEGMENT로 분산 할당

3. 연속된 여러 SEGMENT 분산 할당도 안되는 경우 : 여러 SEGMENT에 분산 할당

 

DYNAMIC SGA

9i 부터 재부팅 없이 SGA 내부 구성 요소 크기 설정 적용 (REDO LOG BUFFER 제외)

 * GRANULE  : 메모리 할당 단위 이름

기준 9i :

SGA_MAX_SIZE < 128 MB -> 1 GRANULE = 4MB

       > 128 MB -> 1 GRANULE = 16MB

기준 10g :

SGA_MAX_SIZE < 1GB -> 1 GRANULE = 4MB

 > 1GB -> 1 GRANULE = 16MB

 

SGA 크기 확인


SQL> show sga;

SQL> show sga_max_size;

      SQL> show shared_pool_size;

SQL> show db_cache_size;


Total System Global Area : 전제 SGA 양

FIXED SIZE : BACKGROUND PROCESS 사용공간

VARIABLE SIZE : SHARED POOL, LARGE POOL, JAVE POOL 공간

DATABASE BUFFERS : DBC 공간

REDO BUFFERS : REDO LOG BUFFER 공간

 

* 10g이면 ASSM 기능때문에 SHARED POOL 과 DB CACHE 크기가 0으로 나올수 있다

 

크기변경


     SQL> alter system set shared_pool_size= granulesize M;


 

'ORACLE DB > Oracle DB Admin' 카테고리의 다른 글

DATABASE BUFFER CACHE  (0) 2013.03.11
REDO LOG BUFFER  (0) 2013.03.11
SHARED POOL, LARGE POOL, JAVA POOL, STREAMS POOL FIXED SGA  (0) 2013.03.11
PGA(PROGRAM GLOBAL AREA)  (0) 2013.03.11
SCN(SYSTEM COMMIT NUMBER)  (0) 2013.03.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함