요약
- 디스크는 1바이트만 읽는 것이 불가능하고, 무조건 블록 단위(보통 4KB~16KB)로 읽어야 한다
- 디스크 헤드 이동(seek time) 비용이 크기 때문에, 한 번 움직이면 뭉텅이로 읽는 것이 효율적
본문
왜 블록 단위인가?
디스크(HDD/SSD)의 물리적 특성 때문:
- HDD: 디스크 헤드를 원하는 트랙으로 이동시키는 시간(seek time)이 ms 단위로 느림
- 한 번 헤드를 움직였으면 주변 데이터까지 한꺼번에 읽는 게 효율적
디스크 요청: "100번 주소의 1바이트 읽어줘"
실제 동작: "100번 주소가 포함된 4KB 블록 전체를 읽음"
블록 크기
- OS/파일시스템 레벨: 보통 4KB
- 데이터베이스 페이지: 8KB (PostgreSQL), 16KB (MySQL InnoDB)
설계에 미치는 영향
B-Tree 노드 크기를 블록 크기에 맞춤
- 노드 1개 = 블록 1개가 되도록 설계
- 노드가 블록 경계를 넘으면(예: 8KB 블록인데 9KB 노드) → 2번의 I/O 발생
Trade-off
| 장점 | 단점 |
|---|---|
| Spatial locality 활용 | 작은 데이터도 전체 블록 I/O |
| 인접 데이터 prefetch 효과 | I/O amplification 발생 가능 |