본문 바로가기

SQLP 자격증

SQLP - 데이터베이스 아키텍처(1)

@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