# INSTANCE = SAG + Backgroud Process
# user process : 사용자가 작성한 SQL문을 server process로 전달해주고 결과를 가지고 오는 프로세스
# server process : SQL문을 수행하는 프로세스
# connection : user process + server process 통신 경로
# session : 데이터베이스 instance 에 대한 현재 유저가 로그인 상태를 나타낸다. ex) 로그인창
■ SGA(System Global Area)
- 모든 오라클 프로세스가 액세스하는 공유 메모리
(privata memory => server process의 PGA)
- SGA 영역에 있는 구성들을 DB 운영중에 동적으로 설정할 수 있다. (: dynamic parameter)
- SGA 메모리는 SGA_MAX_SIZE 로 설정한다.
ALTER SYSEMT SET SGA_MAX_SIZE = 1G SCOPE = SPFILE;
- SGA_MAX_SIZE parameter : SGA 총 메모리 사이즈를 관리하는 파라미터(static parameter)
# SQL
SELECT * FROM v$sgainfo;
SQL> SELECT * FROM v$sgainfo;
NAME BYTES RES
-------------------------------- ---------- ---
Fixed SGA Size 1367004 No
★Redo Buffers 5419008 No
Buffer Cache Size 276824064 Yes
Shared Pool Size 125829120 Yes
Large Pool Size 8388608 Yes
Java Pool Size 4194304 Yes
★Streams Pool Size 4194304 Yes
Shared IO Pool Size 0 Yes : 잘 사용 하지 않음.
Granule Size 4194304 No
Maximum SGA Size 711430144 No
Startup overhead in Shared Pool 68784648 No
NAME BYTES RES
-------------------------------- ---------- ---
Free SGA Memory Available 285212672
12 rows selected.
# SGA 구성요소들은 Granule(증감 단위, 배수 단위)에 따라 할당해야 한다.
1. 연속적인 가상 메모리 할당
2. 예상된 총 SGA_MAX_SIZE 기준으로 Granule Size 가 결정된다.
1) SGA_MAX_SIZE 가 1GB 작거나 같은면 4mbyte
2) SGA_MAX_SIZE 가 1GB 크면 16mbyte 단위로 결정
4mbyte <= 1GB(SGA_MAX_SIZE) < 16mbyte
SQL> show sga
Total System Global Area 711430 : 총 사이즈(량)
Fixed Size : 오라클이 사용하고 있는 메모리, 공유X, 오라클이 instance 생성시 알고리즘들이 이 메모리에서 수행
Variable Size 427820068 bytes : Shared Pool Size, Large Pool Size, Java Pool Size, Streams Pool Size
Database Buffers 276824064 bytes : Database Buffer Cache
Redo Buffers 5419008 bytes : Redo Log Buffer
■ Database Buffer Cache, Data Buffer Cache
(block 올라오는 경우)
- 데이터 파일에서 읽은 데이터 블록의 복사본을 저장하는 메모리 영역
- 오라클은 물리적인 I/O 를 최소화 하기 위해 최근에 사용된 블록(BLOCK)을 저장하는 메모리 영역
- 모든 유저는 data buffer cache 에 대한 액세스를 공유, server process 가 한다.
- 설정하지 않는다면, 기본적으로 48mbyte 또는 4mbyte *CUP 수 중 큰값
- data buffer cache 내부 구성 요소 파라미터
db_cache_size (필수 구성) : db_block_size 기본 블록 크기에 배수 단위 설정한다.
db_keep_cache_size (옵션 구성)
db_recycle_cache_size (옵션 구성)
db_nk_cache_size (n: 2, 4, 8, 16, 32) (옵션 구성)
SQL> show parameter db
rdbms_server_dn string
standby_archive_dest string ?/dbs/arch
standby_file_management string MANUAL
xml_db_events string enable
- 동적으로 크기를 조정할 수 있다.(IMMEDIATE, dynamic parameter)
#SQL
ALTER SYSTEM SET db_cache_size = (96m) SCOPE=BOTH;
- LRU(Least Recently Used) 알고리즘을 통해 관리한다 :튜닝때 활용
■ shared pool
#SQL
SELECT * FROM v$sgastat;
SELECT * FROM v$sgastat WHERE pool = 'shared pool';
- shared_pool_size 파라미터를 이용해서 크기를 지정한다.
- 동적으로 크기를 조정할 수 있다.
#SQL
ALTER SYSTEM SET shared_pool_size = 128m;
- Library Cache : SQL문, 실행계획을 가지고 있는 메모리
- Data Dictionary Cache : data dirctionary 테이블의 정보를 가지고 있는 메모리
- oracle shared server(user process 다수 : server process 1개) 환경일때 UGA(User Global Area, =:cursor) 가 생성된다.
SQL> show parameter shared_pool_size
#SQL
SELECT * FROM v$sgasta tWHERE pool = 'shared pool';
SELECT count(*) FROM v$sgastat WHERE pool = 'shared pool';
SELECT * FROM v$parameter WHERE name ='shared_pool_size'; --dynamic parameter
■ Large pool(옵션 메모리 영역, 최근에는 무조건 사용)
- large_pool_size 파라미터로 크기 조정
- 동적인 파라미터이다
#SQL
ALTER SYSTEM SET large_pool_size = 10m SCOPE=BOTH;
- 다음용도의 데이터를 메모리에 저장하는데 사용
1. oracle shared server 환경일때 UGA(User Global Area, =:cursor) 가 생성된다.
- shared server 환경일 때 shared pool 메모리 공간의 부담을 줄이기 위해서 large pool 사용하자
2. RMAN(tool) 을 이용해서 '백업 및 복원' 작업 수행 할때
3. parallel query(병렬쿼리, SQL 문장 튜닝) 작업 수행할때
SQL> show parameter large_pool_size
#SQL
SELECT * FROM v$sgainfo;
SELECT * FROM v$parameter WHERE name ='large_pool_size';
■ Java pool(옵션, java 프로그램 사용한다면, 필수적으로 사용)
- java_pool_size 파라미터로 크기 조정
- 동적 파라미터이다.
#SQL
SELECT * FROM v$parameter WHERE name ='java_pool_size';
ALTER SYSTEM SET java_pool_size = 24m;
- JVM 내의 모든 세션별 JAVA 코드 및 데이터를 메모리에 저장하는데 사용한다.
SQL> show parameter java_pool_size
#SQL
SELECT * FROM v$sgainfo;
SELECT * FROM v$parameter WHERE name ='java_pool_size';
■ Stream pool(=: 복제시스템)
- 하나의 데이터베이스에서 다른 데이터베이스로 데이터를 이동, 복제하는 stream process 에 필요한 buffer queue message 사용
(별도의 비용 부가)
- streams_pool_size 파라미터로 크기 조절한다.
- 동적 파라미터
#SQL
SELECT * FROM v$sgainfo;
SELECT * FROM v$parameter WHERE name ='streams_pool_size';
ALTER SYSTME SET streams_pool_size = 10m;
SQL> show parameter streams_pool_size
■ REDO LOG BUFFER
- 데이터베이스 데이터 블록의 모든 변경 사항을 기록한다.
- 기본 목적은 only 복구(recovery)이다.
- 내부의 기록된 변경사항을 리두항목(redo entry) 라고 한다.
- 리두항목(redo entry)에는 변경 사항을 재구성하거나 재실행할 정보가 포함되어 있다.
- 리두항목 생성 될 SQL문 : DML(insert, update, delete, merge), create, alter, drop, select * for update
- log_buffer :parameter
- static parameter
#SQL
SELECT * FROM v$parameter WHERE name ='log_buffer';
ALTER SYSTEM SET log_buffer = 5m SCOPE=SPFILE;
'Data Base > Linux' 카테고리의 다른 글
231212 Linux_Background Process : Background Process, DBWn, LGWR, CKPT, checkpoint, SMON, PMON, 다중화, 이중화 (0) | 2023.12.12 |
---|---|
231212 Linux_ASMM, PGA, SGA, AMM (0) | 2023.12.12 |
231211 Linux_초기 파라미터 파일, spfile, pfile (2) | 2023.12.11 |
231208 Linux_startup, shutdown (1) | 2023.12.11 |
231207 Linux _ oracle11g 설치 및 설정 ⓑ (1) | 2023.12.07 |