레코드 블로킹
더 많은 작업
레코드 블로킹(Record Blocking)은 데이터베이스 파일의 레코드를 디스크 입출력 단위인 블록(페이지)에 나누어 담는 방법으로, 한 블록에 들어가는 레코드 수를 블로킹 인수(blocking factor, bfr)라 한다.
디스크와 주기억장치 사이의 전송은 레코드 하나가 아니라 블록 단위로 일어난다. 그래서 파일을 저장할 때는 레코드를 블록에 몇 개씩 담을지, 블록 경계에 걸치는 레코드를 허용할지를 정해야 한다. 엘마스리(Elmasri)와 나바테(Navathe)는 블록 크기 B 바이트, 고정 길이 레코드 크기 R 바이트(B ≥ R)일 때 블록당 레코드 수를 bfr = ⌊B / R⌋ 로 정의하고, 블록마다 B - (bfr × R) 바이트가 쓰이지 않고 남는다고 설명한다.[1]
| 구분 | 비신장(unspanned) | 신장(spanned) |
|---|---|---|
| 블록 경계 | 레코드가 블록 경계를 넘지 않는다 | 레코드가 두 블록에 걸칠 수 있다 |
| 남는 공간 | 블록 끝에 레코드 하나가 안 들어가는 자투리가 남는다 | 자투리를 다음 레코드의 앞부분으로 채운다 |
| 레코드 접근 | 레코드 하나를 읽는 데 블록 하나면 된다 | 걸친 레코드는 블록 두 개를 읽어야 한다. 다음 조각을 가리키는 포인터가 필요하다 |
| 쓰는 경우 | 고정 길이 레코드, 레코드가 블록보다 작을 때 | 레코드가 블록보다 크거나, 가변 길이 레코드로 공간 낭비를 줄일 때 |
Silberschatz 등도 고정 길이 레코드를 i 번째 레코드의 위치가 n × (i - 1) 바이트가 되게 이어 붙이면 접근은 쉽지만 레코드가 블록에 걸칠 수 있으므로, 레코드가 블록 경계를 넘지 않게 고쳐 저장한다고 설명한다.[2]
실제 블록(페이지)의 앞부분에는 블록 번호, 레코드 수, 빈 공간 위치 같은 관리 정보를 담는 블록 헤더가 있다. 헤더가 H 바이트이면 레코드에 쓸 수 있는 공간은 B - H 이고, 비신장 조직에서
- bfr = ⌊(B - H) / R⌋
- 필요한 블록 수 b = ⌈전체 레코드 수 r / bfr⌉
- 레코드로 가득 찬 블록의 남는 공간 = (B - H) - bfr × R
- 마지막 블록의 남는 공간 = (B - H) - (그 블록의 레코드 수) × R
예: 블록 2,048 바이트, 헤더 16 바이트, 레코드 200 바이트, 레코드 25개
- 레코드 공간 = 2,048 - 16 = 2,032 바이트
- bfr = ⌊2,032 / 200⌋ = 10 (10 × 200 = 2,000 바이트)
- 블록 수 = ⌈25 / 10⌉ = 3. 첫째·둘째 블록에 10개씩, 셋째 블록에 5개
- 첫째·둘째 블록의 남는 공간 = 2,032 - 2,000 = 32 바이트
- 셋째 블록의 남는 공간 = 2,032 - 5 × 200 = 1,032 바이트
헤더를 빼지 않고 2,048 로 나누면 남는 공간이 48 바이트로 계산되어 틀린다. 남는 공간은 블록 전체가 아니라 헤더를 뺀 레코드 영역에서 계산한다.
- ↑ Ramez Elmasri, Shamkant B. Navathe, 『Fundamentals of Database Systems』 7판, Pearson, 2016, 16.4 Placing File Records on Disk(Record Blocking and Spanned versus Unspanned Records).
- ↑ Silberschatz, Korth, Sudarshan, 「Database System Concepts 7th Edition - Chapter 13: Data Storage Structures」 강의 슬라이드, https://www.db-book.com/slides-dir/PDF-dir/ch13.pdf, 확인일: 2026-11-04.