Computer Science/Database

DBMS Architecture

Kim Jinung 2023. 5. 15. 15:38

Overview

From 'Databse internals'

DBMS는 통상 다음과 같은 레이어로 구성된다. (DBMS마다 구조가 천차만별이지만, 일반적으로는 다음과 같다.)

 

  • Transport subsystem: 클라이언트의 요청을 받는다. DB 클러스터 노드 간 통신에도 사용한다.
  • Query Processor: 쿼리를 해석, 분석 검증, 최적화하고 실행 계획을 선택한다.
  • Execution Engine: 선택한 실행 계획을 실행한다. 스토리지 엔진의 인터페이스에 해당한다.
  • Storage Engine: 실질적인 데이터 쓰기, 읽기 작업을 담당하는 컴포넌트다.

Transport

DBMS는 클라이언트/서버 모델에 기반한다. DB를 사용할 때 특정 주소로 연결을 요청하고, 커넥션 풀에서 커넥션을 받아오고, 해당 커넥션을 이용해서 쿼리를 날리는 과정이 익숙하다. 

 

DB 주소로 커넥션을 요청할 때 그 응답을 받는 역할을 하는 것이 Transport subsystem이다. 해당 계층은 디비 클러스터 내에 참여하고 있는 다른 노드의 요청을 받는 역할도 같이 담당한다. 즉 DBMS에서 클라이언트를 위한 인터페이스에 해당한다.

Query processor

Query paser

유저가 요청한 쿼리를 해석, 분석, 검증한다.

Query optimizer

  1. 쿼리에서 논리적으로 불가능한 부분과 중복 제거한다.
  2. 인덱스 카디널리티와 클러스터 내 데이터 저장 위치와 전송 비용 등을 고려하여 가장 효율적인 쿼리 실행 계획을 생성, 선택한다.

Execution Engine

쿼리 옵티마이저가 선택한 실행 계획을 실행한다.

 

  • Remote execution: 클러스터내에 참여하고 있는 해당 DBMS의 Transport 계층에 쿼리 수행을 요청한다.
  • Local execution: 스토리지 엔진이 직접 실행 계획을 수행하도록 한다.

Storage Engine

플러그인 형태로 변경이 가능하다. 따라서 디비 개발자는 스토리지 엔진을 쉽게 변경할 수 있다. MySQL의 InnoDB, MyISAM이 스토리지 엔진이 그 예시다.

 

스토리지 엔진은 다음과 같은 컴포넌트로 구성된다.

 

  • Transaction manager: 트랜잭션을 스케줄링하고, 디비 상태의 논리적 일관성을 보장한다.
  • Lock manager: 트랜잭션에서 접근하는 디비 객체에 대한 잠금을 제어한다. 동시 수행 작업이 물리적 데이터 무결성을 침해하지 않도록 제어하는 역할이다.
  • Access method: B-Tree 등의 자료구조를 사용해서 디스크에 접근하거나 데이터를 저장하는 자료구조가 포함되는 컴포넌트다. 즉 디비 성능의 핵이다. (보통 인덱스 파일과 데이터 파일을 분리하는 구조를 사용하는 경우가 많다.)
  • Buffer manager: '데이터 페이지'를 메모리에 캐시한다.
  • Recovery manager: 로그를 유지 관리하고 장애 발생 시 시스템 복구를 담당한다.

Appendix

Data Page

디비에서도 페이지라는 용어를 사용한다. 컴퓨터과학에서 페이지란 메모리 영역을 일정한 사이즈로 분할 해서 활용하는 기법을 의미한다. 디비에서도 유사한 의미로 사용한다.

 

컴퓨터에서 사용하는 디스크 스토리지는 데이터 저장을 위한 최소 단위로 블록(Block)을 사용한다. 그리고 DB는 데이터 저장을 위한 최소 단위로 페이지를 사용한다. 이 페이지는 디스크 블록으로 구성되며 일반적으로 4KB, 8KB 사이즈를 가지며 하나의 페이지에는 여러 개의 레코드를 저장할 수 있다. 즉 페이지가 데이터베이스에서 데이터를 읽고 쓰는 최소 단위이며, 테이블은 최소 1개 이상의 페이지로 구성된다.

Partitioning

테이블 파티셔닝(Partitioning)은 테이블을 여러 개의 논리적인 파티션으로 분할한다. 해당 기능은 대용량 데이터를 보다 쉽게 관리할 수 있도록 돕기 위한 기능이다. 위에서 다룬 페이지를 사용하는 예시가 바로 이 파티셔닝이다. 테이블 파티셔닝 시 기준으로 사용하는 것 중 하나가 페이지다. 페이지를 기준으로 테이블을 파티셔닝 하면 데이터를 논리적인 구조로 분할 할 수 있다.

Database Connectivity layer

실질적으로 커넥션 풀과, 클라이언트 요청에 응답해서 커넥션을 제공하는 레이어로, Transport layer와는 별도의 레이어다.