DBMS architecture |
---|
SQL Client |
Query Parsing & Optimization |
Relational Operators |
Files and Index Management |
Buffer Management |
Disk Space Management |
Database |
각각 2-3ms, 0-4ms, ~0.25ms이 걸립니다. 따라서, seek time과 rotational delay를 줄이는 것이 관건입니다.
읽기는 2~3KB 단위로 가능하지만, 쓰기는 1~2MB 단위로 가능합니다. 또한, 쓰기 연산은 garbage collecting도 수반하기 때문에 그에 대한 오버헤드도 있습니다.
따라서, 읽기는 기존 하드디스크보다 10~1000배 정도의 성능 향상이 있습니다. 하지만, 쓰기 성능은 드라마틱하게 좋진 않습니다.
SSD의 특징은, sequential read와 random read의 성능이 비슷하다는 것입니다. 쓰기 연산의 경우 큰 단위로 쓰기 때문에 sequential write의 성능이 훨씬 좋습니다.
그러나, 전체적으로 SSD의 쓰기/읽기 성능은 하드디스크를 상회합니다.
Block: unit of transfer for disk read/write
64KB ~ 128KB
Page: common synonym for block, a block-sized chunk of RAM
"Next" block : 특정 블록으로부터 가장 가까운 블록(현재 블록으로부터 seek, rotational delay가 적은 블록)을 의미합니다. 다음과 같은 순으로 가깝다고 말할 수 있습니다.
디스크 공간을 관리하며, 페이지를 읽고 쓸 수 있는 API를 제공합니다.
페이지를 요청할 때, 상위 레이어들은 "Next" page가 빠르다고 추측합니다. 그래서 연속한 페이지를 스캔하는 것이 빠를 것이라고 기대합니다. 그러나, 실제 디스크의 세부사항은 상위 레이어들에게는 감춰져있고 Disk Space Manager가 관리합니다.
DBMS 파일은 여러 개의 디스크에 있는 여러 개의 파일 시스템에 걸쳐서 작용할 수 있습니다.
위의 그림과 같이, Disk Space Management 레이어는 상위 레이어가 각 Storage를 하나의 거대한 contiguous한 블록들이라고 인식할 수 있도록 해줍니다. 만약, Page5를 fetch한다면 Disk Space Manager는 BigFile2에서 Page5를 찾아 로드할 것입니다.
DB 테이블은 파일들의 집합이고, 파일은 페이지의 집합입니다.
자료구조에 나오는 heap과는 다른 개념입니다. 특정한 순서가 없는 레코드의 집합을 heap file이라고 부릅니다.
Unordered Heap Files을 구현하기 위해서는 다음과 같은 메타데이터를 유지할 수 있도록 구현해야합니다.
구현
다음과 같은 정보를 가집니다.
Packed란, 레코드들이 빈 공간 없이 앞에서부터 채워져있다는 의미입니다.
페이지 헤더에 비트맵 자료구조를 지닙니다. 각 비트는 레코드의 유무를 나타냅니다.
Packed와 비교하여, Record Id를 변경하지 않아도 되므로 더 효율적인 방식이라고 말할 수 있습니다.
slotted directory
slotted directory는 포인터의 배열입니다. 초기값은 레코드의 마지막 위치, 즉 비어있는 공간이 시작하는 위치를 나타내는 포인터를 저장하는 슬롯과 슬롯의 개수를 기입하는 슬롯입니다. slotted directory는 페이지의 가장 뒤에서 시작해서 앞으로 커집니다.
레코드 삭제에서 대두되는 문제가 empty space fragmentation입니다. 해당 문제를 해결하기 위해서는
와 같은 방법을 사용할 수 있습니다. reorganization은 레코드 사이의 빈공간이 없도록 레코드들을 앞으로 붙이는 작업을 의미합니다.
헤더를 푸터로 바꾼 이유
slotted directory의 존재만으로 유추할 수 있습니다. slotted directory는 slot이 증가하므로, 헤더에 있다면 모든 레코드의 위치가 그때마다 바뀝니다. 레코드의 위치가 바꾸면 포인터도 업데이트 시켜주어야하기 때문에 오버헤드가 상당합니다. 따라서 푸터로 바꾸어 데이터가 반대방향으로 자라도록 합니다.
결론
slotted page는 fixed length record에도 충분히 적용할 수 있는 general purpose한 자료구조입니다.
기본적으로 테이블 스키마는 데이터베이스 카탈로그에 저장되어 있습니다.
필드 길이가 고정되어 있기 때문에, 스키마를 보고 각 필드의 위치를 계산할 수 있습니다.
필드 길이가 가변입니다. 따라서, Fixed Length Field의 경우와 같이 계산을 통해 필드의 위치를 구할 수는 없습니다.
따라서, 가변 길이 필드에 대한 메타정보를 지닌 레코드 헤더를 둡니다.
하얀색 박스가 고정 길이 필드, 하늘색 박스가 가변 길이 필드입니다.
가정
Heap File | Sorted File | |
---|---|---|
Scan all records | B*D | B*D |
Equality Search | 0.5BD | (logB)*D |
Range Search | B*D | (logB + pages) * D |
Insert | 2*D | (logB + B) * D |
Delete | (0.5B + 1)D | (logB + B) * D |