-
Oracle DB 구조 파헤치기DB 공부 2024. 4. 5. 18:35
Oracle DB의 구조를 크게 뜯어보면 우선 Instance와 Database로 나뉜다.
그리고 Instance 안에서도 SGA와 Background Process로 나뉘고, 각각의 역할을 하는 구성원들이 또 있다.
Oracle DB를 구성하는 구성요소를 하나씩 뜯어보자.
1. Instance
1-1. SGA (System Global Area, 공유 영역)
: 여러 프로세스가 공유되기에 직렬화 장치 존재
1) Shared Area
- Libarary Cache: SQL, StoredProcedure, 실행계획 저장
- Dictionary Cache: 테이블 구성요소, 스키마 구조 등 저장
2) DB Buffer Cache
: Data files에서 읽은 데이터 캐싱
Direct Path Read 방식을 제외하고는 모든 블록의 읽기는 캐시를 통해 Read 됨
버퍼 블록은 LRU알고리즘*으로 이루어짐
3) Redo Log Buffer
4) Java Pool
5) Large Pool
1-2. Background Process
1) PMON: 좀비 프로세스 Clear, 제거된 서버 프로세스의 PGA 반환
2) SMON: Instance Recovery*, 임시 세그먼트와 익스텐트 모니터링
3) DB Writter: DB Buffer의 내용을 Datafiles에 작성
> 파라미터: db_writer_processes
> 기동조건: 주기적(3초)으로 CKPT 발생, Direct Path Read 직전, Tablespace의 ReadOnly설정 변경 시, Tablespace 온라인 백업 시, 테이블 Truncate 또는 Drop 시점
4) Log Writter: 서버 프로세스가 변경한 내역을 Redo Log Buffer 기록, RedoLogBuffer의 내용을 RedoLogfiles 작성, Fast Commit*
> 기동조건: 매 3초마다, RedoLogBuffer가 1/3 이상 찼을 때, Redo Log Buffer가 1MB 넘을 때, DBWR 기동 직전, Commit 발생 시
5) CheckPoint: 메모리와 File간 동기화 시점 보장. CKPT 구동 시 DBWR에게 기동 신호 전달. CKPT 정보는 SCN(CKPT)*, RBA(Redo Byte Address, Redo Log 위치) 값 등 저장. Instance Recovery* 시 Roll Forward 시작 위치 지정. Control file header와 Data file header에 Check Point 정보 기록
2. PGA (Process Global Area)
: 데이터 정렬, Hash 관련 작업, 세션과 커서 관련 상태 정보 저장
3. DataBase
1) Data files
: system 정보, checkpoint 정보
2) Control files
: datafiles, redo log files의 경로를 가지며 checkpoint 정보 가짐
3) Redo Log files
: DB 복구 시, DML을 재 실행하기 위해 필요한 로그 정보 저장
Log Writter가 Append 방식으로 Write
Write Ahead Logging > DB Buffer Cache에 쓰기 이전에 Redo Log 작성(DBWR 이전에 LGWR 먼저 작동)
full 날 수 없으며, Sequencial하게 사용됨
4) Parameter files
: Instance 기동 시 제일 먼저 읽는 파일로 각종 설정 정보 저장
Contorl files의 위치와 경로를 헤더에 가지고 있음
5) Password files
6) Archived Log files
: Redo Log Files에서 로그 스위치를 할 때, Archive로 로그파일 떨어짐.
Archive가 FULL나면 Redo Log에서 멈추는 현상 발생 > Archive Clear하면 해결됨
DBA는 매일 Archive용량 확인 필요. 평상시 1-20% 사용하도록 관리
주기적으로 백업받고 지워줘야 함. 보관주기는 DBA가 정하여 관리됨.
* 상세 설명
A. LRU 알고리즘 (Least Recently Used)
- 데이터 버퍼 블록은 다음과 같은 상태로 나누어 진다
상태 설명 Free Buffer 인스턴스 기동 후 아직 데이터가 읽히지 않아 비어있거나(Clean Buffer),
데이터가 담겨있지만 데이터 파일과 동기화되어 덮어써도 되는 상태.
오라클이 새로운 데이터 블록을 로딩하려면 먼저 Free Buffer를 확보해야 함Dirty Buffer 캐시 내에서 변경되었으나 아직 디스크에 기록되지 않은 블록.
디스크에 기록되는 순간 Free 버퍼로 상태 변경됨Pinned Buffer 읽기 또는 쓰기 작업을 위해 현재 엑세스 되고 있는 버퍼 블록. - LRU 알고리즘은 이 데이터 블록이 사용빈도 순에 따라 위치를 옮기다가 Free 버퍼가 필요하게 되면 엑세스 빈도 낮은 데이터블록을 우선 하여 밀어내(AgingOut) 자주 액세스되는 블록이 캐시에 오래 남도록 관리하는 것.
B. Instance Recovery
- 절차: Roll Forward -> Roll Back -> Check Point
- SMON이 실행
- Roll Forward: 최종 CheckPoint 발생 이후부터 최근까지의 Redo Log의 데이터를 DB Buffer Cache에 적재
- Roll Back: Commit을 만나지 않은 데이터를 Undo 이용하여 제거
- Check Point: Cache와 데이터 파일 동기화시점 인지를 위해 사용
C. SCN(System Checkpoint Number)
- 체크포인트 증가 시 +1됨
- 이외 SCN 약자를 가진 number가 있어 추가 설명
(1) SCN (System Change Number)
: SCN 중 제일 작으며, 데이터 변경 시마다 +1 증가
(2) SCN (System Commit Number)
: 커밋 시 +1 증가
(+) WrapNo
: 위의 SCN들이 다 가지고 있으며 SCN의 실행 시점을 채번하여 비교
'DB 공부' 카테고리의 다른 글
제51회 SQLP 합격 수기 (3) 2024.09.30 오라클의 파라미터 파일(spfile, pfile) (0) 2024.04.07 Oracle DB의 구동(startup & shutdown) (0) 2024.04.06