티스토리 뷰
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 |