eff3ct's st0rage Dev Blog

[DBMS] 08. Architecture of DBMS

  • 한양대학교 컴퓨터소프트웨어학부 정형수 교수님의 2022년도 데이터베이스시스템및응용 강의를 듣고 정리한 내용임을 밝힙니다.
  • 내용에 오류가 있을 수 있으며, 발견 시 댓글로 알려주시면 감사하겠습니다.

8. Architecture of DBMS

  • DBMS 아키텍쳐에 대해 알아보자.

SQL은 어떻게 처리되는가?

DBMS는 어떤 단계를 거쳐서 SQL을 처리하는가? DBMS는 글자로 구성된 문자열을 받아서 해석하고 해석된 명령을 디스크에 읽고 쓰며 쿼리를 처리한다. 어떻게 시스템이 설계되었는 지 알아보며 처리과정을 이해해보자.

DBMS는 레이어 구조 아키텍쳐로 설계된 시스템이다. 레이어 구조란 어떤 기능을 담당하는 하나의 레이어가 다른 레이어와는 독립적으로 작용하면서 데이터를 받아 처리하는 구조이다. DBMS는 다음과 같은 레이어로 구성되어 있다.

dbms-architecture

1. Query Parsing & Optimization

Query Parsing & Optimization 레이어는 들어온 쿼리 스트링을 파싱하고 이를 분석해서 최적화해주는 레이어이다. 마치 컴파일러에서 소스코드를 읽어서 다른 언어로 변환하는 과정과 비슷하다. 이 레이어에서 DBMS가 읽을 수 있는 형태로 쿼리가 변환된다.

2. Relational Operators

Relational Operators 레이어는 쿼리를 처리하는 레이어이다. Union, Join 등의 관계 연산자들이 이 레이어에서 처리된다. 이 레이어에서는 쿼리를 처리하기 위해 레코드와 파일을 통해 위와 같은 어떤 하나의 dataflow가 실행된다.

3. Files and Index Management

테이블로 표현되는 데이터를 실제 논리적인 파일로 구성하는 파트이다. 이 레이어에서는 테이블을 파일로 저장하고, 파일을 버퍼에서 읽고 쓰는 등의 작업을 수행한다. 또한 인덱스를 관리하는 레이어이기도 하다. 보통 ‘page’라는 단위로 파일을 관리하고, 파일이 페이지라는 단위로 나뉘어져 각각 데이터가 저장된다. 이 레이어의 행위는 모두 버퍼 레이어를 통해 전달된다.

인덱스라는 말이 나왔는데, DBMS에서 인덱스란 내부적으로 사용하는 B+Tree에 작성되는 인덱스를 의미한다. B+Tree는 이후에 자세히 다루도록 하겠다. B+Tree의 노드는 인덱스의 순서대로 관리되기 때문에, 정렬이 되어있다는 특성을 가지고 있어 효율적인 탐색이 가능하게 해주낟. 이렇게 B+Tree를 통해 인덱스를 관리하는 레이어가 바로 Files and Index Management 레이어이다.

그림을 참고하자면, 아래의 테이블을 실제로 저런 느낌의 논리적인 파일 형태로 바꾸어 저장하게 해주는 레이어이다. (여담으로 DBMS 구조에 대해 가르치는 강의들은 이걸 보통 B+Tree를 구현하는 것을 과제로 내는데 우리학교는 이 과목이 한때 2학년에 있었다. 그래서 학년에 맞지 않는 과제를 한다고 다들 고생했다. 물론 정형수 교수님 강의 과제는 이게 시작에 불과했다.)

page-conversion

4. Buffer Management

버퍼가 무엇일까? 메모리(RAM)에 저장되는 어떤 데이터 공간이다. DBMS는 디스크에 저장되어 있는 데이터를 메모리에 올려서 처리한다. 이 때, 그 데이터들을 위해 할당된 공간이 바로 버퍼이다. 버퍼가 왜 필요할까?

하드디스크와 같은 물리적 저장 매체들은 읽고 쓰는 속도가 메모리에 비해 아주 많이 느리다. 일반적인 하드디스크는 물리적으로 회전하며 데이터를 읽는 구조이다. 원통 모양의 판이 계속 회전하며 디스크 헤드가 읽어오는 방식이라 전자적으로 동작하는 CPU에 비해 아주 느리다. 보통 연산을 처리할 때, 하드디스크 -> 메모리 -> CPU 순서로 데이터를 읽어서 처리하게 된다. 이렇게 하는 이유는 메모리라는 공간을 둠으로써 하드디스크의 아주 느린 R/W 성능을 보완하고 빠르게 데이터를 올려 연산하기 위해서이다. 하드디스크쪽으로 갈 수록 용량이 아주 커지지만 속도가 느려지고 반대로 갈 수록 용량은 작아지지만 속도가 매우 빨라진다. 이런 특성을 가지고 있어서 CPU가 빠르게 데이터를 처리하는 동안에 하드디스크에서 버퍼에 데이터를 올려놓으면 더욱 효율적인 처리가 가능하게 되는 것이다.

이런 이유로 DBMS는 R/W 성능 향상을 위해 버퍼 레이어를 가지고 있다. 버퍼 레이어는 DBMS가 작동하기에 필수적인 기능을 하는 레이어는 아니다. 단지, 성능 향상을 위해 존재하는 레이어이다. 즉, 버퍼 레이어가 없어도 DBMS는 작동할 수 있다 (아주 느릴뿐..)

DBMS가 실행하는 동안 램에 일정량의 공간을 형성해 미리 DB 페이지들을 옮기고 거기서 읽고 쓰기 작업을 하게 한다.

5. Disk Space Management

실제로 디스크에 읽고 쓰는 작업을 해주는 레이어다. 즉, 가장 하위에 위치하는 레이어이고 가장 많은 코스트가 드는 레이어이다. Disk I/O는 아주 많이 느리다. 극단적으로 예를 들면, CPU와 메모리 사이의 거리는 100km 정도이고 메모리와 디스크 사이의 거리는 지구로부터 명왕성까지의 거리이다. 즉, 아주 성능 차이가 심하고 디스크에 읽고 쓰는 작업이 아주 느리다는 것을 생각할 수 있다.

Disk I/O의 코스트가 아주 크기 때문에 버퍼 레이어를 통해 데이터를 주고 받게 된다. 즉, 버퍼에 적힌 내용을 디스크에 쓰게 되고, 버퍼에 필요한 페이지를 찾아 올려주는 역할을 한다. Disk I/O와 관련된 시스템 콜들(read, write, seek 등등..)을 사용해 구현할 수 있다.