저장공간과 세그먼트 설계
저장공간 설계는 DBMS의 블록·페이지, 익스텐트·할당 단위, 세그먼트·객체, 테이블스페이스·저장 컨테이너 계층을 이해하고 행 길이·건수·증가율·보존기간·인덱스·여유 공간·임시 작업을 반영해 용량과 증설 기준을 산정하는 작업입니다.
핵심 요약
관계형 DBMS는 데이터를 일정 크기의 블록·페이지에 저장하고 여러 블록을 할당 단위로 묶어 테이블·인덱스 같은 객체에 공간을 제공한다. Oracle 계열에서는 일반적으로 데이터 블록 → 익스텐트 → 세그먼트 → 테이블스페이스라는 논리 계층을 사용하지만, 다른 DBMS는 페이지·익스텐트·파일그룹·컨테이너 등 용어와 연결 방식이 다르다. 따라서 계층 원리는 이해하되 제품 용어를 보편 규칙으로 단정하지 않는다.
학습 목표
- 블록·페이지, 익스텐트, 세그먼트, 테이블스페이스의 관계를 설명한다.
- 데이터·인덱스·임시·UNDO·로그 영역의 목적을 구분한다.
- 건수·행 길이·오버헤드·여유·인덱스·증가율로 기초 용량을 계산한다.
- 자동 확장과 별개로 임계치·증설시간·보존·아카이빙 계획을 수립한다.
1. 물리 저장 계층
1.1 데이터 블록 또는 페이지
DBMS가 저장·읽기·쓰기하는 기본 논리 I/O 단위다. 한 페이지에 여러 행이나 인덱스 엔트리가 들어간다. 페이지 크기보다 큰 행·가변 컬럼은 여러 페이지 사용이나 별도 저장이 필요할 수 있다. 행 헤더, 트랜잭션 정보, 슬롯, 여유 공간 때문에 페이지 전체를 사용자 데이터로 채울 수 있는 것은 아니다.
1.2 익스텐트 또는 할당 단위
연속 또는 논리적으로 묶인 여러 블록·페이지를 객체에 한 번에 할당하는 단위다. 객체가 성장하면 추가 익스텐트를 획득한다. 지나치게 작은 증분은 할당 관리가 늘고, 지나치게 큰 증분은 미사용 공간을 늘릴 수 있다. 현대 DBMS의 자동 관리 기능을 사용하더라도 성장 패턴과 임계치를 이해해야 한다.
1.3 세그먼트 또는 객체 저장 영역
테이블·인덱스·UNDO·임시 객체처럼 하나의 논리 객체에 속한 익스텐트 집합을 의미하는 제품 용어다. 대표적인 예는 데이터 세그먼트와 인덱스 세그먼트다. “한 테이블=항상 한 세그먼트”는 파티션·LOB·클러스터 등 제품 구조에서 달라질 수 있다.
1.4 테이블스페이스·파일그룹·저장 컨테이너
여러 객체의 논리 저장 영역을 데이터파일·스토리지에 연결하는 상위 관리 단위다. 가용성, 백업, 읽기전용, 보존, I/O, 관리 책임에 따라 객체를 분리할 수 있다. 명칭과 구현은 DBMS별로 다르므로 대상 제품의 공식 문서를 확인한다.
대표적 논리 계층(Oracle식 용어 예시)
테이블스페이스
└─ 세그먼트(테이블/인덱스/UNDO 등)
└─ 익스텐트
└─ 데이터 블록
2. 영역별 목적
| 영역 | 주요 내용 | 설계 시 고려 |
|---|---|---|
| 데이터 | 테이블 행, LOB 등 | 행 길이·건수·증가·보존·압축 |
| 인덱스 | 키·행 위치·포함값 | 엔트리 크기·개수·DML·재구성 여유 |
| 임시 | 정렬·해시·중간 결과 | 동시 대형 작업·피크·공간 회수 |
| UNDO/버전 | 롤백·일관 읽기·행 버전 | 긴 트랜잭션·보존 요구·동시성 |
| REDO/WAL/트랜잭션 로그 | 복구·복제용 변경 기록 | DML량·로그 전환·보존·복구 |
로그는 많은 DBMS에서 테이블스페이스의 세그먼트가 아니라 별도 파일·스트림으로 관리된다. “데이터·인덱스·UNDO·로그를 모두 동일한 세그먼트 계층에 둔다”는 식으로 일반화하지 않는다.
3. 용량 산정 요소
3.1 기본 데이터 용량
기본 데이터량 = 예상 행 수 × 평균 행 길이
평균 행 길이는 컬럼 선언 최대 길이의 단순 합이 아니다. 실제 값 길이, NULL 비율, 행 헤더, 정렬·문자 인코딩, 가변 길이 오버헤드를 샘플 데이터로 추정한다.
3.2 오버헤드와 여유 공간
데이터 영역 = 기본 데이터량 × (1 + 행/블록 오버헤드율 + 운영 여유율)
오버헤드와 여유율을 하나의 계수로 합칠 수도 있지만 무엇을 포함했는지 명시한다. 갱신으로 행 길이가 늘어나는 테이블은 페이지 내 여유가 필요할 수 있고, 추가형 테이블은 다른 비율을 적용할 수 있다.
3.3 인덱스
인덱스 용량은 키 길이, 행 위치 정보, 엔트리 수, 브랜치·리프 오버헤드, 압축, 여유 공간에 따라 달라진다. 초기 계획에서는 데이터 영역의 일정 비율로 추정할 수 있지만 최종 설계에서는 후보 인덱스별 엔트리 크기와 실제 생성 결과로 보정한다.
3.4 증가·보존·피크
- 초기 적재와 일·월 증가량
- 온라인 보존기간과 삭제·아카이빙 속도
- 행사·월말의 피크 적재
- 인덱스 재구성·테이블 재작성 시 추가 작업 공간
- 백업·복제·로그 보존 공간
- 통계 수집·대량 정렬의 임시 공간
현재 사용량만 맞추면 재구성·장애·피크 작업에서 공간이 부족할 수 있다.
4. 기초 용량 계산 사례
가정:
- 3년 후 예상 행 수: 50,000,000건
- 평균 행 길이: 200바이트
- 행·블록 오버헤드와 여유 공간: 기본 데이터의 30%
- 인덱스: 데이터 영역의 40%
- 운영 예비 공간: 데이터+인덱스의 20%
- 계산은 1GB=1,000,000,000바이트 사용
계산:
1) 기본 데이터량
50,000,000 × 200B = 10,000,000,000B = 10GB
2) 데이터 영역
10GB × 1.30 = 13GB
3) 인덱스 영역
13GB × 0.40 = 5.2GB
4) 데이터+인덱스
13GB + 5.2GB = 18.2GB
5) 운영 예비 포함
18.2GB × 1.20 = 21.84GB
이 21.84GB는 단순 초기 계획값이다. 임시·UNDO·로그·백업·재구성 공간은 별도 산정해야 하고 실제 행 길이와 인덱스 생성 결과로 보정한다.
5. 저장공간 설계 절차
객체별 현재·예상 건수와 행 길이 산정
↓
보존·삭제·아카이빙과 피크 적재 반영
↓
데이터·LOB·인덱스별 기본 용량 계산
↓
오버헤드·여유·재구성·임시·UNDO·로그 산정
↓
관리 단위·스토리지·백업·증설 정책 연결
↓
샘플 적재로 실제 점유율과 성장률 보정
↓
경고 임계치·조달시간·자동 확장 상한 설정
6. 증설과 모니터링
자동 확장은 공간 부족을 늦출 뿐 용량 계획을 대체하지 않는다.
- 경고 임계치: 예) 70%, 80%, 90%
- 증가 속도: 일·주 단위 추세와 소진 예상일
- 증설 소요시간: 승인·스토리지 조달·파일 추가·재균형
- 자동 확장 상한과 파일 시스템 여유
- 비정상 증가 탐지: 로그 폭증, 임시 공간 장기 점유, 삭제 미작동
- 증설 후 백업·복구 시간 변화
7. 비교와 구분
| 구분 | 의미 | 혼동 주의 |
|---|---|---|
| 블록/페이지 | 기본 I/O·저장 단위 | OS 블록과 항상 동일하지 않음 |
| 익스텐트 | 여러 블록의 할당 단위 | 반드시 물리 연속이라는 보장은 제품별 차이 |
| 세그먼트 | 객체에 속한 익스텐트 집합 | 모든 DBMS가 같은 용어 사용하지 않음 |
| 테이블스페이스 | 객체와 파일을 묶는 논리 관리 영역 | 파일 자체와 동일하지 않음 |
| 임시 영역 | 중간 연산 저장 | 영구 데이터 영역과 목적 다름 |
| UNDO | 롤백·일관 읽기용 이전 정보 | REDO/WAL 로그와 목적 다름 |
| REDO/WAL 로그 | 복구·복제용 변경 기록 | 일반 데이터 세그먼트로 보지 않음 |
시험 판단 포인트
- 저장 계층의 방향과 각 단위의 역할을 구분한다.
- 용량은
행 수×행 길이에서 끝나지 않고 오버헤드·여유·인덱스·증가·보존·작업공간을 포함한다. - 임시·UNDO와 REDO/WAL 로그의 목적을 혼동하지 않는다.
- 자동 확장 설정은 장기 용량·증설·모니터링 계획의 대체물이 아니다.
- 제품별 용어와 기능 차이를 보편 원칙과 분리한다.
자주 틀리는 부분
- 컬럼 최대 길이를 모두 더해 평균 행 길이로 사용한다.
- 데이터 테이블 용량만 계산하고 인덱스·LOB·임시·로그를 제외한다.
- 보존기간 만료 삭제 속도와 아카이빙 공간을 산정하지 않는다.
- 현재 여유율만 보고 인덱스 재구성·대량 적재 작업공간을 빼먹는다.
- 테이블스페이스와 물리 데이터파일을 같은 개념으로 본다.
개념 확인 문제
문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.
01객관식 Oracle식 논리 저장 계층을 작은 단위에서 큰 단위 순으로 올바르게 나열한 것은? A. 세그먼트→블록→테이블스페이스→익스텐트 B. 블록→익스텐트→세그먼트→테이블스페이스 C. 익스텐트→블록→세그먼트→테이블스페이스 D. 블록→세그먼트→익스텐트→테이블스페이스
정답: B
- B: 데이터 블록들이 익스텐트를 이루고, 익스텐트 집합이 객체 세그먼트를 이루며, 세그먼트는 테이블스페이스에 속한다는 Oracle식 대표 계층이다.
- 다른 선택지는 포함 순서가 뒤섞였다.
- 다른 DBMS에서는 페이지·익스텐트·파일그룹 등 용어가 다를 수 있다.
02객관식 다음 중 REDO/WAL 로그의 주된 목적은? A. 사용자 조회 결과를 영구 저장 B. 변경 기록을 이용한 복구·복제 지원 C. 정규화 위반 자동 제거 D. 모든 인덱스 엔트리 저장
정답: B
- B: 트랜잭션 변경 기록을 남겨 장애 복구와 복제를 지원한다.
- A: 임시 결과나 영구 사용자 데이터 저장이 주목적이 아니다.
- C: 논리 설계 오류를 자동 수정하지 않는다.
- D: 인덱스 엔트리는 인덱스 저장 구조에 있다.
03참·거짓 “자동 확장을 설정하면 증가율·보존기간·증설 소요시간을 별도로 계획할 필요가 없다.”
정답: 거짓
자동 확장은 상한·스토리지 잔여량·확장 시간·조달 기간을 고려하지 않으면 파일 시스템 전체를 소진할 수 있다. 소진 예상일과 증설 리드타임을 기반으로 임계치를 운영해야 한다.
04계산 문제 3년 후 50,000,000행, 평균 200B, 오버헤드·여유 30%, 인덱스가 데이터 영역의 40%, 운영 예비 20%일 때 데이터+인덱스+예비 용량을 계산하시오. 1GB=10^9B로 계산한다.
정답: 21.84GB
기본 데이터 = 50,000,000 × 200B = 10GB
데이터 영역 = 10 × 1.30 = 13GB
인덱스 = 13 × 0.40 = 5.2GB
합계 = 18.2GB
운영 예비 포함 = 18.2 × 1.20 = 21.84GB
임시·UNDO·로그·백업·재구성 공간은 이 계산에 포함되지 않았으므로 별도 산정한다.
05설계 문제 대량 주문 테이블의 용량 산정서에 포함해야 할 항목을 데이터, 인덱스, 생명주기, 작업공간, 운영 측면에서 각각 제시하시오.
모범 답안
- 데이터: 현재/예상 행 수, 평균·최대 행 길이, LOB, 행·블록 오버헤드, 여유 공간
- 인덱스: 인덱스별 키 길이·엔트리 수·개수·여유·재구성 공간
- 생명주기: 일·월 증가량, 피크 적재, 온라인 보존기간, 삭제·아카이빙 속도
- 작업공간: 대량 정렬·해시·적재·인덱스 생성·테이블 재작성에 필요한 임시 공간
- 트랜잭션 영역: 긴 트랜잭션과 대량 DML에 필요한 UNDO/버전·REDO/WAL 로그
- 운영: 자동 확장 상한, 경고 임계치, 증설 리드타임, 백업·복구 시간, 복제 공간
- 검증: 샘플 적재 후 실제 압축률·행 길이·인덱스 점유율로 보정하는 절차
숫자뿐 아니라 산정 기준일·단위·가정·출처를 함께 기록해야 한다.