>> Oracle, SQL Server의 Architecture 정리 (참고 문헌 : 데이터진흥원 - SQL 전문가 가이드)
| [Oracle] Architecture | [SQL Server] Architecture |
![]() |
![]() |
** DBMS를 [Instance] : process/memory와 [Database] : storage(데이터 집합)으로 구분하여 정리한다.
[Instance]
1) Process
1-1) Server Process : 전면에서 사용자로부터 명령을 전달받아 처리한다.
■ 주요 기능 : SQL 파싱/최적화, 커서 제어(생성, 데이터 취합, 송신) & Background Process Call
** Server Process를 요약하면 Client와 통하는 창이자 Background Process를 call하는 명령자이다.
** 다수의 Client가 Server에 동시 접속하면 부하가 생길 수 있기 때문에
(1) 전용 서버 + Connecting Pooling, (2) 공유 서버 : Listener와 dispatcher + Queue 방식으로 접근 프로세스를 구현한다.
1-2) Background Process : Server Process의 Call 혹은 로직에 따라 DBMS 유지에 필요한 작업들을 처리한다.
| Oracle | SQL Server | 기능 |
| System Monitor (SMON) |
Database Cleanup /shirinking thread |
장애가 발생한 시스템을 재가동할 때, 인스턴스 복구를 수행하고 임시 세그먼트와 익스텐트를 모니터링한다. |
| Process Monitor (PMON) |
Open Data Service (OPS) |
이상이 생긴 프로세스가 사용하던 리소스를 복구한다. |
| Database Writers (DBWn) |
Lazywriter thread | 버퍼 캐시에 있는 Dirty 버퍼를 데이터 파일에 기록한다. (Dirty 버퍼 : Free 버퍼에 변형이 일어난 상태를 의미) |
| Log Writer (LGWR) |
Log writer thread | 로그 버퍼 엔트리를 Redo 로그 파일에 기록한다. |
| Archiver(ARCn) [optional] |
- | 꽉 찬 Redo로그가 덮어 쓰여지기 전에 Achive 로그 디렉터리로 백업한다. |
| CheckPoint (CKPT) [optional] |
Database Checkpoint thread |
Writing Ahead 방식 : Redo 로그에 기록한 내용 중, 어디까지 실제 데이터 파일에 기록하였는지 checkpoint를 남기는 것으로, 로그와 실제 데이터의 싱크 시점을 의미. 장애 시, 마지막 checkpoint를 추적하여 복구 지점을 정할 수 있다. |
| Recoverer (RECO) [optional] |
Distributed Transaction Coordinator(DTC) | 분산 트랜젝션 중 발생한 문제를 해결한다. |
| Memory Manager (MMAN) |
메모리를 관리한다. |
2) Memory
2-1) system memory : 다수의 프로세스가 동시에 엑세스하는 메모리 영역
■ 이름 : Oracle : SGA(System global Area) / SQL Server : Memory Pool
■ 구성 : 공통 = (1) DB Buffer Cache, (2) Shared Pool (Procedure Cache), (3) 로그 버퍼
/ 그 외 = Large Pool, Java Pool, 시스템 구조 및 제어 구조 캐싱 영역 포함 가능
** 공유되는 매모리의 정합성을 유지하기 위한 매커니즘 : 래치(Latch), 버퍼 Lock [링크], 라이브러리 Lock/Pin [링크]
----------------------
(1) DB 버퍼 캐시 : 데이터 파일을 읽은 블록을 담는 영역.
-> 블록을 읽을 일이 있으면 DB 버퍼 캐시에 올라와 있는지를 먼저 확인하고, 없으면 올린 후에 읽는다.
(direct path read 예외가 아니면 모든 블록은 DB 버퍼 캐시를 통해 읽힌다 : 디스크 I/O와 메모리 I/O의 속도 차 때문)
-> 데이터의 변경도 버퍼 블록을 통해 이뤄지며, 변경된 Dirty 블록은 주기적으로 DBWR에 의해 데이터 파일에 반영된다.
-> 버퍼 블록의 상태는 데이터 파일과의 동기화 상태에 따라 Free(완료) / Dirty(대기) / Pinned(진행중)으로 나뉜다.
-> LRU(least recently used) : 사용 빈도 높을 수록 우선순위를 올려 버퍼 캐시에 저장되도록 하는 알고리즘
(2) Shared Pool : SQL 최적 실행 경로를 작성(하드 파싱)의 반복을 줄이기 위해 메타데이터, 실행계획 등을 저장한는 공간.
-> 딕셔너리 캐시 : 테이블 스페이스, 데이터 파일, 세그먼트, 익스텐트, 사용자, 제약 등의 메타 데이터를 캐시 저장/재활용
-> 라이브러리 캐시 : SQL문과 실행계획, 임시 프로시저를 캐시 저장/재활용
(3) Log buffer : 버퍼 캐시에 가해지는 변경에 대한 모든 로그이다.
-> 로그 데이터도 버퍼 캐시에 저장되었다가 한 번에 Redo Log file (Transaction Log)에 저장된다.
-> 버퍼 캐시의 내용이 데이터 파일에 쓰이기 전에 필연적으로 로그 파일 저장이 발생한다.
2-2) process memory : 개별 프로세스만의 고유 정보들을 저장하는 용도
** Oracle에만 존재 (SQL Server에는 없는 개념 : Memory Pool의 버퍼 캐시와 connection context에서 처리함)
----------------
(1) User Global Area (UGA) : 세션(사용자)마다를 위한 메모리 할당이다. (전용 : PGA에, 공유 : SGA에 할당된다)
(2) Call Global Area (CGA) : 하나의 Call (Parse/Excute/Fetch Call)에 필요한 메모리 = Call이 끝나면 반환된다.
(3) Sort Area : sorting을 위한 메모리 할당 (과정 중에는 CGA에, 최종 반환에는 UGA에 할당된다)
[Database]
3) Storage
** 큰 틀에서 물리적 데이터 파일 저장은 동일하나, 논리적 구현에서 조금 차이를 보인다. 단위 별로 설명을 작성한다.
![]() |
![]() |
![]() |
3-1) 물리적 데이터 파일
3-2) 논리적 저장 단위
Block (Page) : I/O의 기본 단위
■ 크기 : Oracle = 2/4/8/16/32KB 중 선택 사용, SQL Server = 8KB 단일 단위 사용
-> 레코드가 하나의 블록에 저장되는 RDBMS들의 특성상, 하나의 컬럼만 조회할 때도 레코드가 속한 블록 전체를 읽어야할 수 있다.
-> 블록의 스캔량은 SQL 성능을 좌우하는 성능지표로 실행 계획 수립의 기준이 된다.
Extent : 공간을 할당하는 단위
■ 크기 : 8개의 연속된 블록(페이지)로 구성되며 Oracle은 다양하지만 SQL Server = 8개 (64KB) 단일 단위 사용
-> 연속된 블록을 할당받는다. 익스텐트들은 여러 데이터 파일에 멀리 저장될 수 있다.
Segment (Heap/Index) : 테이블/인덱스/Undo 와 같은 DB 내의 오브젝트들
■ 크기 : 복수의 익스텐트를 할당받는다. (세그먼트와 1:1 관계가 일반적이나, 파티션/인덱스 테이블은 1:M의 관계를 갖는다)
-> 한 세그먼트는 본인이 속한 테이블 스페이스(파일 그룹) 내 여러 데이터 파일에 분산 저장될 수 있다.
TableSpace (File Group) : 세그먼트들을 담는 컨테이너
3-3) 임시 데이터 파일 : 대량의 정렬이나 해시 작업 수행 중, 메모리 부족이 발생되면 공간을 할당하기 전 중간 과정을 저장
-> Oracle은 다양한 임시 저장소를 지정할 수 있고, SQL Server는 tempdb를 이용한다.
3-4) 로그 파일 : 버퍼 캐시에 가해지는 모든 변경사항을 기록 (Oracle:Redo로그, SQL Server:Transaction로그)
-> 데이터 변경에 대한 디스크 I/O는 Random I/O여서 느리지만, 로그는 Append 방식으로 저장되어 빠르다.
-> 로그 파일이 빠른 속도로 저장된 후, 순차적으로 DBWR, Checkpoint 등의 프로세스로 버퍼 케시와 동기화한다.
** Oracle : 모든 공간이 차면 처음으로 돌아간다(Round Robin). Redo Log의 백업으로 Archive Redo이다.
** SQL Server : 데이터베이스마다 하나씩 생성되며, ldf 확장자로 저장된다. (너무 조각화되지 않도록 크게 만든다)
** 참고 문서 : [링크]
'Data Engineering > OnPrem_DataBase' 카테고리의 다른 글
| [DataBase] 옵티마이저 (0) | 2024.04.21 |
|---|---|
| [DataBase] 조인의 원리 & 튜닝 (0) | 2024.04.10 |
| [DataBase] I/O 메커니즘 - 튜닝 지표 (0) | 2024.03.31 |
| [DataBase] 인덱스의 원리 & 스캔 & 최적화 (0) | 2024.03.31 |
| [DataBase] SQL 쿼리 처리과정 & HINT (0) | 2024.03.24 |





