본문 바로가기
Database

DBMS 버퍼 관리

by creatingeveryday 2023. 5. 27.

버퍼 관리(Buffer Management)

DBMS에서 가장 낮은 레벨인 디스크 공간 관리 모듈과 파일 및 인덱스 관리 모듈 사이에 위치하고 있다.

왜 버퍼 관리가 필요한가?

  • 메모리 공간은 제한되어 있기 때문에 디스크의 모든 페이지를 버퍼 풀에 저장할 수 없다.

버퍼 관리의 책임과 역할은?

  • 버퍼 매니저는 메모리에서 페이지를 관리하고 파일 및 인덱스 매니저로부터 페이지 요청을 처리하는 역할을 담당하고 있다.
    • 디스크의 페이지 ID와 RAM 의 주소를 매핑한다.
    • 요청된 페이지를 RAM 에 유지하고 조작할 수 있게 한다.
    • 사용이 끝난 페이지는 pin을 해제하여 RAM에서 제거될 수 있도록 한다.
  • 페이지가 메모리에서 제거되거나 새로운 페이지가 메모리에 올라갈 때 디스크 공간 관리 모듈과 통신하여 필요한 디스크 작업을 수행한다.
  • 메모리에서 업데이트가 발생한 페이지를 어떻게 다룰 것인가?
    • 버퍼 매니저는 페이지에 업데이트가 발생했는지 어떻게 알 수 있나?
    • 업데이트 발생 여부를 확인 후 업데이트가 발생한 페이지를 디스크에 다시 반영해야 한다.
  • 버퍼 풀 공간이 부족할 때 어떤 페이지를 교체할 것인가?
    • 페이지 교체 정책에 따라 페이지를 교체

버퍼 풀(buffer pool)

  • DBMS 초기 실행 시 메모리를 버퍼 풀로 할당한다.
  • 할당 시 페이지가 위치할 수 있는 프레임 단위로 공간을 분할되어 있다.
  • 추가로 프레임을 효율적으로 추적하고 관리하기 위해 메모리에 메타데이터 테이블을 위한 추가 공간을 할당한다.
    • Farme ID: 메모리의 주소와 연관된 유일한 ID
    • Page ID: 현재 프레임이 포함하는 페이지를 결정하기 위한 페이지 ID
    • Dirty Bit: 페이지가 수정되었는지 여부를 확인하기 위한 값
    • Pin Count: 페이지를 현재 사용 중인 요청자의 수

페이지 요청 처리

  • 페이지가 요청될 때
    • 버퍼 풀에 페이지가 없다면
      • pin count 가 0인 프레임 내의 페이지를 선택한다.
      • 프레임이 내의 페이지가 수정되었다면 디스크에 다시 쓰고
      • 요청된 페이지를 프레임으로 읽는다.
    • 페이지가 사용중인 상태임을 나타내기 위해 pin count를 증가시키고 페이지의 주소를 리턴한다. (페이지의 작업이 완료되면 사용한 pin count를 다시 감소시킨다.)
    • 페이지가 수정되었다면 dirty bit를 세팅한다.
    • 페이지 요청을 예측가능할 수 있다면 페이지를 미리 불러오는 게 좋다.
  • 페이지 교체 정책은 페이지 접근 패턴에 의존하고 있다.
    • 페이지 히트를 카운트하여 최적의 정책을 선택한다.

페이지 교체 정책(page replacement policy)

  • 버퍼 풀에 존재하는 페이지의 캐시 적중율을 높여야 한다.
  • LRU
    • 자주 사용되는 페이지와 최근에 사용된 페이지를 효과적으로 메모리에 유지할 수 있는 정책이다.
    • 가장 오랫동안 참조되지 않은 페이지를 교체
      • pinned frame은 교체대상이 아니다.
      • 각각의 프레임이 마지막으로 unpin 된 시간을 추적한다.
      • last used 필드가 가장 작은 값(가장 오래된 시각)을 가지는 가장 오래전에 참조된 페이지를 교체한다.
        • last used 필드는 버퍼 풀의 메타데이터 테이블에서 핀 카운트가 감소된 시각(마지막으로 페이지가 사용된 시각)을 의미한다.
  • Clock Policy
    • CPU 비용이 LRU 방식보다 적게 든다.
    • 메타데이터 테이블에 최근 참조된 페이지의 여부를 표시하고(ref bit), Clock hand 변수를 사용하여 LRU에 비해 공간과 시간의 비용을 줄일 수 있다.
      • last used 값을 저장하기 위해 LRU에서는 여러 비트가 필요했지만 Clock에서는 프레임당 하나의 비트만 필요하다.
      • LRU에서는 pin count가 0이고 Last Used 필드가 최솟값인 페이지를 찾기 위해 비교적 시간을 많이 소모하게 된다.
    • 버퍼 매니저는 단순히 clock hand 변수를 이용하기만 하면 쉽게 교체할 페이지를 선택할 수 있게 된다.
    • 작동 방법
      • 테이블 내의 프레임을 반복하면서 끝에 도달 시 다시 처음으로 돌아가는 방식으로 동작한다.
      • pinned page(사용 중인 페이지)는 건너뛴다.
      • unpinned page(사용 중이 아닌 페이지)의 경우 ref bit를 1에서 0으로 수정하고 다음 프레임으로 이동한다.
      • 순회하면서 최종적으로 pint count 가 0이고 ref bit가 0인 페이지를 교체하게 된다.
  • 순차적인 탐색 시 성능
    • LRU 방식은 순차적인 탐색시 Sequential Flooding 이 발생할 수 있다.
    • 순차적인 스캔은 테이블의 모든 레코드를 스캔하는 등의 데이터베이스 작업에서 자주 발생하기 때문에 다른 페이지 교체 정책을 고려해야 한다.
    • LRU 방식은 페이지가 랜덤으로 접근되는 경우에 MRU 보다 유리하다.
  • MRU(Most Recently Used)
    • 가장 최근에 사용된 페이지를 교체한다.
    • 즉, 가장 최근에 pin count 가 감소된 페이지를 교체하는 방식이다.
    • 가장 최근에 참조된 페이지의 ref bit를 이용하여 최신 참조 여부를 추적하여 간단하게 교체할 페이지를 선택할 수 있다.
    • 순차적인 탐색 시에도 LRU에 비해 페이지 히트율이 높다.
  • LRU와 MRU를 적재적소에 사용하려면?
    • DBMS가 버퍼매니저에게 수행할 작업이 단순 랜덤 액세스 조회 작업인지 순차적이고 반복적인 작업인지 힌트를 제공하여 버퍼 매니저가 적절한 페이지 교체 정책을 선택할 수 있다.

'Database' 카테고리의 다른 글

디스크 공간 관리 모듈  (0) 2023.05.08
DBMS 아키텍처  (0) 2023.05.06
SQL  (0) 2023.04.22
데이터베이스 시스템  (0) 2023.04.15

댓글