==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====
# Oracle DB의 물리적 구성요소
1. 프로세스 영역
- 사용자 프로세스 (클라이언트)
- 서버 프로세스 : 밑에 설명란 참조
- 백그라운드 프로세스 (DBWR, LGWR, PMON, SMON, CKPT)
머리 글자어 | 프로세스 이름 | 설명 |
CKPT | 체크포인트 프로세스 | 콘트롤 파일 및 데이터 파일 헤더에 체크포인트 정보를 기록. |
DBWR | DataBase Writer | 버퍼 캐시에 있는 Dirty 버퍼(블록)를 데이터 파일에 기록하는 프로세스 |
PMON | 프로세스 모니터 | 실패한 프로세스 리소스를 Recovery. Shared Server구조가 사용된 경우 PMON은 모든 실패한 디스패처 또는 서버 프로세스를 모니터하고 재시작. |
LGWR | 로그 기록자 프로세스 | 로그 버퍼를 리두 로그에 기록 |
SMON | 시스템 모니터 프로세스 | Instance failure 이후 Recovery를 수행하고 임시 세그먼트 및 Extent를 모니터 |
=> 그 외에도 ARCn, RECO, 등등 무수히 많은 Oracle background 프로세스들이 존재한다.
=> 위 5개는 필수 백그라운드 프로세스이다.
2. 메모리 영역 : 밑에 설명란 참조
- Shared Pool
- Data Buffer Cache
- Log Buffer
- Large Pool
3. 파일 영역 : DB가 생성되면서 만들어졌던 자료 및 Table/View/Index/Sequence 등등이 저장되어진다. 또한 모든 DB의 상태정보가 저장된다. 이 영역이 흔히 말하는 "DataBase" 영역.
- Control Files
=> DB startup 시 항상 참조되는 파일. 해당 파일은 DB에서 사용하게 될 모든 파일들의 절대경로, 파일 크기 등의 정보를 저장. 새로운 데이터 파일이 추다괴면 해당 파일의 디렉토리 정보 및 파일 상태를 Control Files에 저장하게 된다.
- Parameter Files
=> 시스템으로부터 얼마만큼의 메모리 크기를 할당받을지, Control Files의 경로, DB 환경설정 등 관련된 모든 정보를 포함. 보통 INIT.ora 파일 이름으로 존재한다.
- Data Files
- Redo-Log Files
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====
# 프로세스
- 서버 프로세스
=> 사용자 프로세스(클라이언트)와 통신하면서 사용자의 각종 명령어를 처리하는 프로세스
=> 서버 프로세스 ~ 클라이언트를 연결하는 방식에는 Dedicated Server 방식과 Shared Server 방식이 있다
(밑에 따로 설명)
- 백그라운드 프로세스
=> 데이터 파일을 읽어서 DB Buffer Cache에 적재 / Dirty Block을 cache에서 제거해 Free Block을 확보 / Redo log buffer를 비우는 일 등등 내부적으로 DB 시스템이 원활하게 돌아가게 해주는 프로세스
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====
# 디스크 영역 파일 구조
- 데이터 파일
=> 물리적으로 디스크에슨 DB가 여러 Data Files들로 구성되어 있다.
=> 각 데이터파일은 여러 개의 Block 단위로 구성되어 있다.
=> 해당 영역의 논리적 영역 구조는 아래와 같다.
=> Block에는 다양한 데이터가 있으며, Block Header는 Block을 관리하기 위한 데이터를 가진다.
=> DB에서는 I/O를 Block 단위로 하기에, 성능은 읽어들이는 Block의 개수에 따라 좌우되게 된다.
- 임시 데이터 파일
=> 대량의 정렬/해쉬 작업을 수행하다가 메모리 공간 부족 시, 중간에 결과 집합을 잠시 저장했다가 삭제하는 용도로 사용되는 파일이다.
- 로그 파일
=> Online Redo Log : Cache에 저장된 변경사항이 아직 데이터파일로 기록되지 않은 상태에서 장애가 생기면, 이를 복구하기 위해 Online Redo Log를 사용한다. 최소 2개 이상의 파일로 구성되며, 하나의 파일이 꽉 차면 다른 로그를 쓰고 모든 파일이 꽉 차면 다시 첫번째 파일부터 재사용하는 형식.
=> Archived Redo Log : Online Redo Log가 재사용되기 전에 다른 위치로 백업해둔 파일.
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====
1. SGA (System Global Area)
- 공유 메모리(Shared pool) 구조 그룹이다.
- 하나의 Oracle DB instance의 데이터 및 제어 정보를 포함하며, 모든 서버 및 background process에 공유된다
- 동적 SGA 구조를 통해 인스턴스 종료 없이도 다음과 같은 것들의 크기를 변경할 수 있다.
(Shared Pool, Databalse Buffer Cache, Large Pool, Streams Pool)
# Shared Pool
- 유저 간에 공유할 수 있는 다양한 구성요소를 캐시에 저장
- SQL 및 SQL 실행계획을 공유해서 같은 SQL의 Parsing은 권한 확인만 수행하도록 만들어서 실행 속도 높인다
- 하위의 Data Dictionary Cache 를 활용하여 실행계획을 만들고 저장해서 공유한다
# Database Buffer Cache
- DB에서 검색된 Data Block을 캐시에 저장
- Disk I/O 영향도를 줄이기 위해 Data File의 Data Block을 메모리에 가져다 놓는다
# KEEP Buffer Pool
- 메모리에 데이터를 오랫동안 보존하기 위해 튜닝된 DB Buffer Cache
# Recycle Buffer Pool
- 메모리에서 Block을 신속하게 재사용/제거하기 위해 튜닝된 DB Buffer Cache
# nK Buffer Cache
- 기존 DB block 크기와 다른 block 크기를 저장하도록 설계
# Redo Log Buffer
- Instance 복구에 사용되는 Redo 정보가 디스크에 저장된 물리적 Redo Log File에 기록(write)될 때까지 해당 정보 저장
- 데이터 변경사항 (DML 발생) 정보를 가지며, Redo Log File 이전에 Memory에 먼저 write되게 한다
# Large Pool
- 특정 대용량 프로레스 및 I/O 서버 프로세스에 대한 대용량 메모리 할당을 제공하는 영역 (선택적 영역)
- Parallel Query 메시징 or 대용량의 메모리 할당이 필요한 경우 사용된다
# Java Pool
- JVM 내의 모든 세션 별 Java 코드 및 데이터에 사용
- Java Object에 대한 메모리 영역
# Streams Pool
- Oracle Stream에서 캡처 및 적용에 필요한 정보 저장
- Data 복제 등을 위한 Stream 사용 영역
2. PGA (Program Global Area)
- 비공유 메모리 구조 그룹이다
- 서버 또는 백그라운드 프로세스의 데이터/제어정보를 포함하고 있음
- 서버 프로세스만 엑세스할 수 있으며, 서버/백그라운드 프로세스는 각각 독자적으로 PGA를 가진다.
- 서버 프로세스가 시작될 때 PGA는 Oracle DB에 의해 생성되며, 프로세스 종료 시 해제된다.
- PGA는 SQL들의 작업공간으로써, 정렬 작업을 할 때 주로 사용된다.
== PGA 내부에 대한 설명 ==
# UGA (User Global Area)
- User Session Data
추출된 결과 값을 전달하기 위해 유저 프로세스의 세션 정보를 저장. SQL문 결과를 유저 프로세스에게 전달하고자 유저 세션 주소를 저장함
- Cursor State
해당 SQL의 파싱 정보가 기록되어 있는 주소를 저장 (실행한 SQL문의 위치)
- Sort Area
정렬할 때 사용하는 공간. SQL의 작업 공간이며 가장 많은 공간을 할당해야 한다.
# Stack Space
SQL문장에 Bind 변수를 사용할 때 이를 저장하는 공간.
== PGA 모드 구성 방식 ==
# Dedicated Server
User Session Data, Cursor State, Sort Area 영역을 직접 PGA 공간에 저장.
유저 프로세스 : 서버 프로세스 1:1 관계.
PGA 영역은 Stack Space + UGA 형태 (UGA 공간은 PGA로 할당된 영역을 차지하며, 유저 프로세스의 세션정보를 PGA가 가지게 된다)
# Shared Server
User Session Data 영역을 SGA에 저장.
유저 프로세스 : 서버 프로세스 n:1 관계
PGA 영역은 Stack Space, UGA 형태 (유저 프로세스의 주소 정보를 SGA가 가지게 되며, SGA 내에서 UGA는 Large Pool 미설정 시 Shared Pool(SGA 내의)에 위치)
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====
(참조 : https://dataonair.or.kr/db-tech-reference/d-lounge/technical-data/?mod=document&uid=236107)
(참조 : https://debaeloper.tistory.com/49)
(참조 : https://blog.naver.com/93hyuna/220638901109)
(참조: https://jeong-pro.tistory.com/147)
'DB' 카테고리의 다른 글
Vector DB (0) | 2023.06.13 |
---|---|
WebLogic DataSource (0) | 2022.05.25 |
WebLogic ~ MSSQL 연동 (0) | 2022.05.11 |
InsertBatch vs Insert (0) | 2022.05.10 |
SQuirreL SQL Client 연동 (0) | 2022.05.03 |