본문 바로가기

DB/Architecture of a Database System

[Architecture of a Database System] Storage Management

DBMS storage manager 타입에는 두 가지가 있다.

  1. low-level block-mode 디바이스 드라이버와 바로 연결
  2. 표준적인 OS 파일 시스템 이용

두 가지 방법을 차례로 공부하고 스토리지 계층에 대해서 공부한다.

5.1 Spatial Control

디스크로 왔다갔다 하는 Sequential bandwidth 는 Random Access보다 10에서 100배 빠르다. 디스크 밀집도는 18개월마다 두배가 되고 bandwidth는 밀집도의 제곱근으로 증가한다. 디스크 암 움직임은 일년에 약 7퍼센트 향상한다. 따라서 DBMS Storage Manager는 디스크의 블락을 sequential하기 움직일 수 있도록 해야한다.

DBMS가 spatial locality를 제어하는 가장 좋은 방법은 raw 디스크에 데이터를 바로 저장하고 파일 시스템을 사용하지 않는 것이다. raw 디바이스의 주소는 스토리지 위치의 물리적 근접성과 일치하기 때문에 작동한다.

  • 장점
    • 성능
  • 단점
    • DBA가 DBMS의 디스크 파티셔닝을 해해야 한다. 이는 파일 시스템을 통한 백업이 불가능한다.

raw 디스크 접근의 대안으로는 OS 파일 시스템에 아주 큰 파일을 만들어 데이터 포지셔닝을 관리하는 것이다.

최근의 (논문 작성 시점으로) 벤치마크에 따르면 file system을 사용했을 때 성능 저하가 매우 적어, OS에게 맡기는 방법을 주로 사용한다.

5.2 Temporal Control: Buffering

DBMS는 어디에 데이터가 저장될지 결정하는데 더해, 언제 물리적으로 저장될지도 결정한다. DBMS는

대부분의 OS 파일 시스템은 built-in I/O 버퍼링 매커니즘을 제공한다. DBMS가 표준 파일 시스템 인터페이스를 사용하면, OS 버퍼링이 DBMS가 write하는 시점과 다르게 할 수 있다.

문제점

  1. 정확성
  2. DBMS는 디스크 쓰기의 타임밍과 순서를 명시적으로 제어하지 않고는 소프트웨어 혹은 하드웨어 장애 후 atomic recovery를 보장할 수 없다.
  3. 버퍼링 퍼포먼스
  4. 대부분의 OS 파일 시스템은 read-ahead와 write-behind를 제공한다. 이들은 DBMS 액세스 패턴과 맞지 않는다. 파일 시스템 로직은 read-ahead를 위해 physical 바이트 offset의 연접성에 의존한다. DBMS 레벨의 I/O는 쿼리 프로세싱 레벨에서의 read 요청에 의존해 logical 예측 I/O 결정을 제공한다. 미래의 액세스 패턴은 DBMS에서 사용이 가능하지만 OS 파일 시스템에서는 사용이 불가능하다.
  5. 더블 버퍼링과 메모리 복사의 높은 오버헤드
    1. 시스템 메모리를 낭비하게 된다.
    2. OS 버퍼로 카피하고, 이후 다시 DBMS 버퍼에 카피하는 과정은 시간과 프로세싱 자원을 낭비한다.
  6. DBMS는 정확성의 이유로 버퍼링을 본인이 하므로 OS에 의한 버퍼링은 낭비가 된다.

그래서 이를 어떻게 해결하냐? 는 다른 논문을 찾아보라고 알려준다.

5.3 Buffer Management

데이터베이스 페이지를 점근할 수 있게 하기 위해, 모든 DBMS는 메모리 공간에 크고 공유된 버퍼 풀을 구현한다. 버퍼 풀은 프레임들의 배열로 이뤄져 있다. 각각의 프레임은 디스크 블록 크기의 메모리의 영역이다. 블록은 포맷 변화 없이 디스크에서 바로 복사되고 그대로 디스크에 써진다. 이는 marshalling과 unmarshalling의 병목현상을 줄여준다. 또한 고정된 사이즈의 프레임은 external fragmentation과 compaction을 줄여준다.

해시 테이블은 버퍼 풀 프레임 배열과 연관이 있다. 버퍼 풀 프레임 배열은 1) 현재 메모리에 저장된 페이지 번호를 프레임 테이블의 해당 위치에 매핑하고, 2) 백업 디스크 스토리지의 해당 페이지 위치 및, 3) 페이지에 대한 일부 메타데이터를 매핑한다.

메타데이터에는 페이지가 디스크로부터 읽어온 시점으로부터 변경이 있었는지 확인하는 더티비트가 있다. 페이지 교체 정책은 버퍼 풀이 찼을 때 해당 페이지를 교체할 수 없다. 또한 메타데이터에는 페이지를 사용중인지 나타내는 pin이 있다. 페이지를 사용하기 전에 pin을 증가시키고, 끝나면 pin을 다시 감소시킨다. 핀이 된 페이지는 버퍼 풀에서 가능한 페이지의 수를 줄일 수 있어 성능에 영향을 끼칠 수 있다.

다양한 데이터 액세스 패턴으로, 초기의 DBMS 연구는 페이지 교체 알고리즘에 초점을 맞췄다. 예를 들어, 특정 데이터베이스 연산이 풀 테이블 스캔을 요구하고, 스캔된 테이블이 버퍼 풀보다 훨씬 클 때, 이 연산은 흔히 레퍼런스되고 있는 데이터를 지우게 된다. 이러한 액세스 페턴에서 새로운 레퍼런스는 미래에 잘 사용되지 않을 확률이 높다. 따라서 LRU나 CLOCK과 같은 페이지 알고리즘은 많은 데이터베이스 액세스 패턴에서 성능이 좋지 못하다.

쿼리 Execution 플랜 정보를 사용한 페이지 교체 알고리즘, 풀 테이블 스캔을 고려한 LRU 알고리즘 페이지 타입에 따라 교체 정책을 달리하는 알고리즘 등의 방법으로 해결한다.

5.4 Standard Practice

최근에는 파일 시스템이 데이터베이스 스토리지 시스템을 잘 서포트할 수 있도록 발전해왔다.

표준적인 모델에서, 시스템 관리자는 각각의 디스크 또는 논리적 볼륨에 파일 시스템을 만든다. 그리고 DBMS는 하나의 파일 시스템당 하나의 큰 파일을 만든다. 그리고 mmap suite와 같은 low-level 인터페이스를 통해 파일에 있는 데이터 교체를 컨트롤한다. DBMS는 하나의 디스크 또는 논리적 볼륨을 연속된 데이터베이스 페이지의 linear array로 처리할 수 있다.