@markdown
# Oracle 아키텍처(1)
## 아키텍처 개관
____
### Oracle 아키텍처
![](http://wiki.gurubee.net/download/attachments/26744202/oracle.jpg)
- 데이터베이스 : 물리적인 디스크에 저장된 데이터 집합(데이터 파일, 리두로그 파일, 컨트롤 파일)
- 인스턴스 : 공유메모리(SGA)와 이를 액세스하는 프로세스 집합
<br/>
### SQL Server 아키텍처
![](http://wiki.gurubee.net/download/attachments/26744202/sqlserver.jpg)
- 하나의 인스턴스당 최고 32,767개의 데이터베이스를 정의해서 사용
- 기본적으로 시스템데이터베이스가 만들어지면, 사용자데이터베이스를 추가하여 생성하는 구조
- 시스템데이터베이스 : mster, model, msdb, tempdb 등
- 사용자데이터베이스 : 데이터파일(mdf), 트랜잭션로그파일(ldf), 보조데이터파일(ndf)
## 프로세스
____
- 서버 프로세스 : 전면에 나서 사용자가 던지는 각종 명령을 처리
- 백그라운드 프로세스 : 뒤에서 묵묵히 주어진 역할을 수행
<br/>
### 서버 프로세스
- 사용자 프로세스와 통신하면서 사용자의 각종 명령어 처리
- Oracle - 서버 프로세스, SQL Server - Worker Thread
- SQL을 파싱하고 필요하면 최적화를 수행
- 커서를 열어 SQL을 실행하면서 블록을 읽고, 읽은 데이터를 정렬해서 클라이언트가 요청한 결과집합을 만들어 네트워크를 통해 전송하는 일련의 작업을 수행
- DB 버퍼 캐시로 블록 적재, Free 블록 확보하는 일, Redo 로그 버퍼를 비우는 일 등 백그라운드 프로세스가 대신 처리하도록 시스템 Call을 통해 요청한다.
### 클라이언트와 서버 프로세스 연결 방식
#### 1) 전용 서버 방식
![](http://wiki.gurubee.net/download/attachments/26744202/dedicatedserver.jpg)
- 연결 요청을 받는 리스너가 서버 프로세스를 생성해 주고, 이 서버 프로세스가 단 하나의 사용자 프로세스를 위해 전용 서비스를 제공한다는 점이 특징
- 50개의 서버 프로세스와 연결된 50개의 사용자 프로세스를 공유해서 반복 재사용하는 방식
#### 2) 공유 서버 방식
![](http://wiki.gurubee.net/download/attachments/26744202/sharedserver.jpg)
- 하나의 서버 프로세스를 여러 사용자 세션이 공유하는 방식
- 미리 여러 개의 서버 프로세스를 띄어 놓고 이를 공유해서 반복 재사용한다.
- 1) Oracle에 접속하면 사용자 프로세스는 서버 프로세스와 직접 통신하지 않고 Dispatcher 프로세스를 거친다.
- 2) 사용자 명령이 Dispatcher에게 전달되면 Dispatcher는 이를 SGA에 있는 Request Queue에 등록한다.
- 3) 서버 프로세스는 Request Queue에 있는 사용자 명령을 꺼내서 처리하고, Response Queue에 등록한다.
- 4) Response Queue를 모니터링하던 Dispatcher가 응답 결과를 발견하면 사용자 프로세스에게 전송해준다.
### 백그라운드 프로세스
- SMON(System Monitor) : 장애가 발생한 시스템을 재기동할 때 인스턴스 복구를 수행하고, 임시 세그먼트와 익스텐트를 모니터링한다.
- PMON(Process Minitor) : 이상이 생긴 프로세스가 사용하던 리소스를 복구한다.
- DBWn(Database Writers) : 버퍼 캐시에 있는 더티 버퍼를 데이터 파일에 기록한다.
- LGWR (Log Writer) : 로그 버퍼 엔트리를 Redo 로그 파일에 기록한다.
- ARCn(Archiver) : 꽉찬 Redo 로그가 덮어 쓰여지기 전에 Archive 로그 디렉토리로 백업한다.
- CKPT(Checkpoint) : Checkpoint 프로세스는 이전에 Checkpoint가 일어났던 마지막 시점 이후의 데이터베이스 변경 사항을 데이터 파일에 기록하도록 트리거링하고, 기록이 완료되면 현재 어디까지 기록했는지를 컨트롤 파일과 데이터 파일 헤더에 저장한다.
- RECO(Recoverer) : 분산 트랜잭션 과정에 발생한 문제를 해결한다.
### 파일구조
#### 데이터 파일
![](http://wiki.gurubee.net/download/attachments/26744202/datafile.jpg)
- 1) 블록 : 데이터를 읽고 쓸 때의 논리적인 단위
- 2) 익스텐트 : 테이블 스페이스로부터 공간을 할당하는 단위
- 3) 세그먼트
- 테이블, 인덱스,Undo 처럼 저장공간을 필요로하는 데이터베이스 오브젝트 (한개 이상의 익스테트 사용)
- 파티션은 오브젝트와 세그먼트가 1:M (파티션을 만들면 내부적으로 여러개의 세그먼트가 만들어짐)
- 한 세그먼트에 할당된 엑스텐트가 여러 데이터파일에 흩어져 저장됨(디스크 경합감소.I/O 분산효과)
- 4) 테이블 스페이스
- 세그먼트를 담는 콘테이너로서 여러 개의 데이터파일로 구성됨
- 사용자는 데이터파일을 직접 선택할수 없으므로 실제 파일을 선택하고 익스텐트를 할당하는것은 DBMS의 몫
![](http://wiki.gurubee.net/download/attachments/26744202/sql_t.jpg)
### 임시 데이터 파일
- 대량의 정렬이나 해시 작업을 수행하다가 메모리 공간이 부족해지면 중간 결과집합을 저장하는 용도
- 이 곳에 저장되는 오브젝트는 임시로 저장했다가 자동으로 삭제된다.
### 로그 파일
- DB 버퍼 캐시에 가해지는 모든 변경사항을 기록하는 파일(Redo 로그)
- DBMS는 버퍼 블록의 변경사항을 건건이 데이터 파일에 보관하기 보다는 로그 파일에 Append 방식으로 빠르게 기록한다.
- 사용자의 업데이트 내용이 메모리상의 버퍼 블록에만 기록된 채 아직 디스크에 기록되지 않았더라도 Redo 로그를 믿고 빠르게 커밋을 할 수 있다(Fast Commit 매커니즘)
- 인스턴스 장애가 발생하더라도 로그 파일을 이용해 언제든 복구가 가능하다
#### Online Redo 로그
- 캐시에 저장된 변경사항이 아직 데이터 파일에 기록되지 않은 상태에서 인스턴스가 비정상 종료 되는 경우, 트랜잭션 데이터 유실에 대비하기 위한 로그
- 마지막 체크포인트 이후부터 사고 발생 직전까지 수행되었던 트랜잭션들을 Redo 로그를 이용해 재현하는 것(캐시복구)
- Online Redo 로그는 최소 두개 이상의 파일로 구성
- 사용중인 파일이 꽉차면 다음 파일로 로그 스위칭이 발생, 모든 파일이 꽉차면 첫번쨰 파일부터 재사용(라운드로빈 방식)
#### Archived Redo 로그
- Oracle에서 Online Redo 로그가 재사용되기 전에 다른 위치로 백업해 둔 파일을 말한다.
- 물리적인 저장 매체에 문제가 생겼을 때 DB 복구를 위해 사용
> SQL 전문가 가이드 : 과목3. SQL 고급 활용 및 튜닝, 1장 SQL 아키텍처 기반 튜닝 원리 - 제1절 데이터베이스 아키텍처(p.472 ~ p.480)
> 사진 출처 : 구루비넷
'SQLP 자격증' 카테고리의 다른 글
SQLP - SQL 파싱 부하 (0) | 2018.03.05 |
---|---|
SQLP - 데이터베이스 아키텍처(2) (0) | 2018.03.03 |
SQLP - 조인 수행 원리 (0) | 2018.02.06 |
SQLP - 인덱스 기본 원리 (0) | 2018.01.21 |
SQLP - 옵티마이저와 실행계획 (0) | 2018.01.15 |