Background Image
조회 수 411 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

들어가며

 

 데이터베이스의 데이터는 디스크로부터 메모리에 할당되어서 읽힌 다음 수정을 하기도 하고, 새로이 생성되어 메모리에 할당되는 데이터가 있다. 이러한 데이터는 결과적으로는 디스크에 저장되어야 영구적으로 저장됨을 보장할 수 있다. 이 글에서는 큐브리드에서 데이터를 디스크에 저장하는 방법 중 하나를 소개하여서 큐브리드 제품에 대한 이해를 돕고자 한다.

 

현재 글을 쓰는 시점의 버전은 11.2이다. 

 


Double Write Buffer

 

Double Write Buffer의 정의, 목적, 매커니즘을 거쳐 모듈에 대해 전반적인 설명을 하고자 한다.

 

Double Write Buffer 란?

 

큐브리드는 기본적으로 Double Write Buffer를 통해서 디스크에 데이터를 저장한다. Double Write Buffer는 메모리와 디스크 양쪽에 구성되어 있는 버퍼영역이다. 기본적으로 2M의 크기로 설정되어 있으며, cubrid.conf 파일 내에서 그 크기를 32M까지 조절 할 수 있다.

 

Note

큐브리드에서는 Double Write Buffer를 사용해서 DB페이지를 디스크에 저장하는 방법과 DB 페이지를 바로 디스크에 저장하는 방법이 있다. 이번 글에서는 Double Write Buffer를 사용해서 저장하는 방법만 언급하도록 하겠다.

 

Double Write Buffer 의 목적

 

이렇게 생성된 Double Write Buffer는 디스크에 데이터를 저장할때, DB페이지가 깨져서 저장되는 경우를 막을 수 있다. DB페이지가 깨지는 것은 다음의 이유 때문이다.

                                                                                DB page.jpg

이 문서에서 메모리에 존재하는 한 개의 DB페이지는 리눅스 혹은 윈도우의 OS페이지 4개로 이루어져있다고 가정해서 설명한다. 이러한 DB페이지는 디스크에 저장될 때, flush라는 매커니즘을 거쳐서 저장된다.

Flush 매커니즘을 통해서 디스크에 저장될 때 DB페이지는 OS페이지 단위로 나뉘어져 저장되는데, 위 그림과 같이 디스크에 DB페이지의 저장이 완료되지 않았을 때 시스템의 갑작스러운 종료가 일어나면 해당 DB페이지는 깨진 상태가 된다.

Note 이러한 디스크 쓰기를 Partial Write라고 부른다.

 

Double Write Buffer에 데이터가 저장되는 과정

 

큐브리드의 DB페이지는 Double Write Buffer를 거쳐 다음과 같이 디스크에 저장된다.

                                                                          concept_pic_022.jpg

위와 같이, 4개의 OS페이지로 구성된 1개의 DB페이지가 메모리 내 Double Write Buffer에 저장된다. 그 이후, DB 내부 Double Write Buffer에 한 번 그리고 DB파일에 두 번 이렇게 저장된다.

 

메모리 내 Double Write Buffer에서 저장되는 과정은 다음과 같이 자세하게 설명 할 수 있다. 

 

  • DB 페이지는 메모리의 Double Write Buffer안에 있는 하나의 slot에 저장되고, 이러한 slot이 모여 Block이 된다.(아래 그림의 초록색 네모가 하나의 Block)
    • 이러한 연속된 Block들을 메모리 내 Double Write Buffer이라고 부른다.
  • 하나의 Block이 slot으로 가득차게 되면 flush라는 매커니즘을 통해 디스크에 저장이되고, 이러한 flush는 Block 단위로 진행된다.

 

 

                                                                                        23.jpg

 

 

 

DB페이지가 메모리 내 Double Write Buffer로부터 디스크에 있는 DB로의 저장되는 과정은 다음과 같이 두 과정을 순서대로 실행한다.

  1. slot으로 가득찬 단일 Block을 DB 내부 Double Write Buffer에 저장
  2. 단일 Block내 저장된 page와 동일한 위치에 있는 디스크에 page저장

 

DB 내부 Double Write Buffer에 저장이 실패했을 때

 

이 경우에는 깨진 데이터를 Disk에 저장하는 것을 막기 위해 서버를 재구동하거나 Double Write Buffer를 새로 만드는 과정에서 큐브리드 서버가 중지 되어서 아직 디스크에 쓰이지 않는 데이터들이 쓰여진다.

 

디스크 내부 DB에 데이터 저장이 실패했을

 

DB 내부에 저장된 Double Write Buffer를 메모리에 할당 시킨뒤, Block 내부에 있는 page와 DB 내부에 저장된 page를 비교한다. DB영역에서 깨진 DB페이지에 대해서만 다시 flush를 진행시켜서 DB페이지가 깨진 상태로 디스크에 저장되는 것을 방지한다.

 

DB에 DB페이지가 성공적으로 저장되었을 

 

DB 내부에 있는 Double Write Buffer는 그대로 유지되고, 다음 Block이 flush를 통해서 디스크에 DB페이지가 저장될 때 덮어씌워진다. 즉, Double Write Buffer는 계속 유지된다.

 


마치며

 

위와 같은 과정을 거쳐서 Double Write Buffer를 사용한 DB페이지가 성공적으로 저장되고, 깨진 DB페이지가 저장되는 것을 막을 수 있다.

 


 

참고자료

 

  1. CUBRID Manual - https://www.cubrid.org/manual/en/11.0/
  2. CUBRID Source Code - https://github.com/CUBRID/cubrid

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


  1. CUBRID Internal: Disk Manager #1: 볼륨 헤더(Volume Header)와 섹터 테이블(Sector Table)

    이전글: CUBRID Internal: 큐브리드의 저장공간관리 (DIsk Manager, File Manager) 볼륨은 어떻게 관리될까? - 볼륨 헤더(Volume Header)와 섹터 테이블(Sector Table) - 앞선 글에서 디스크 매니저(Disk Manager)가 섹터의 예약(reservation)을 관리한다고 이야기하였다. 이번 글에서는 볼륨 내의 섹터들이 어떻게 관리되는지에 대한 구체적인 이야기와 이를 위해 볼륨이 어떻게 구성되어 있는지를 다룬다. 여기서 다루어지는 볼륨의 구조는 그대로 non-volatile memory (SSD, HDD 등)에 쓰여진다. 볼륨 구조 디스크 매니저의 가장 큰 역할은 파일생성과 확장을 위해 섹터들을 제공해주는 것이다. 이를 위해 각 볼륨은 파일들에 할당해줄 섹터들과 이를 관리하기 위한 메타(meta)데이터로 이루어져 있다. 메타데이터들이 저장된 페이지를 볼륨의 시스템 페이지(System Page)라고 하며, 볼륨에 대한 정보와 각 섹터들의 예약 여부를 담고 있다. 시스템 페이지는 다음과 같이 두가지로 분류할 수 있다. 볼륨 헤더 페이지 (Volume Header Page, 이하 헤더 페이지): 페이지 크기, 볼륨 내 섹터의 전체/최대 섹터, 볼륨 이름 등, 볼륨에 대한 정보를 지니고 있는 페이지 섹터 테이...
    Date2023.03.30 Category제품 여행 By김재은 Views396 Votes2
    Read More
  2. CUBRID Internal: 큐브리드 데이터의 디스크 저장 (Double Write Buffer)

    들어가며 데이터베이스의 데이터는 디스크로부터 메모리에 할당되어서 읽힌 다음 수정을 하기도 하고, 새로이 생성되어 메모리에 할당되는 데이터가 있다. 이러한 데이터는 결과적으로는 디스크에 저장되어야 영구적으로 저장됨을 보장할 수 있다. 이 글에서는 큐브리드에서 데이터를 디스크에 저장하는 방법 중 하나를 소개하여서 큐브리드 제품에 대한 이해를 돕고자 한다. 현재 글을 쓰는 시점의 버전은 11.2이다. Double Write Buffer Double Write Buffer의 정의, 목적, 매커니즘을 거쳐 모듈에 대해 전반적인 설명을 하고자 한다. Double Write Buffer 란? 큐브리드는 기본적으로 Double Write Buffer를 통해서 디스크에 데이터를 저장한다. Double Write Buffer는 메모리와 디스크 양쪽에 구성되어 있는 버퍼영역이다. 기본적으로 2M의 크기로 설정되어 있으며, cubrid.conf 파일 내에서 그 크기를 32M까지 조절 할 수 있다. Note 큐브리드에서는 Double Write Buffer를 사용해서 DB페이지를 디스크에 저장하는 방법과 DB 페이지를 바로 디스크에 저장하는 방법이 있다. 이번 글에서는 Double Write Buffer를 사용해서 저장하는 방법만 언급하도록 하겠다. Double Write...
    Date2022.02.23 Category제품 여행 By김명규 Views411 Votes0
    Read More
  3. CUBRID Internal: 큐브리드의 저장공간관리 (DIsk Manager, File Manager)

    들어가며 데이터베이스는 결국 데이터를 저장해야 하고 데이터를 저장할 공간을 필요로 한다. 운영체제 위해서 동작하는 큐브리드는 운영체제로부터 필요한 만큼의 공간을 할당받고 이를 필요에 따라 효율적으로 사용한다. 이 글에서는 큐브리드가 영구저장장치에 데이터를 저장하기 위하여 내부적으로 어떻게 저장공간을 관리하는지에 대하여 이야기한다. 이를 통해 데이터베이스를 연구하고 개발하는 개발자들이 오픈소스 데이터베이스인 큐브리드에 좀 더 쉽게 접근할 수 있었으면 한다. - 이 글의 내용은 버전 10.2.0-7094ba을 기준으로 하나, 최신 develop branch의 11.0.0-c83e33 에서도 차이가 없는 것으로 보인다. 큐브리드의 저장공간 관리 큐브리드 서버는 여러 모듈들이 복합적이고 정교하게 동작하며 데이터를 관리한다. 이 중 저장공간을 관리해주는 모듈로는 디스크 매니저 (Disk Manager)와 파일 매니저 (File Manager)가 존재한다. 이들의 역할을 명확히 하기 위해서는 먼저 큐브리드에서 저장 공간을 어떠한 단위로 관리하는지를 알아야 한다. 페이지와 섹터 페이지(Page)는 큐브리드의 가장 기본적인 저장공간의 단위이다. 페이지는 연속적인 바이트의 연속...
    Date2020.03.31 Category제품 여행 By김재은 Views1625 Votes1
    Read More
Board Pagination Prev 1 Next
/ 1

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales