Data Base/Linux

231211 Linux_SAG, Database Buffer Cache, Data Buffer Cache, shared pool, Large pool, Java pool, Stream pool, REDO LOG BUFFER

잇꼬 2023. 12. 11. 17:26
728x90
반응형
SMALL

# 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;
728x90
반응형
LIST