SQL Professional
[독학! SQLP] 데이터베이스 구조
by 개발자의
2025. 8. 21.
테이블 스페이스
- 세그먼트를 저장하는 논리적 공간
- 하나 이상의 데이터 파일(Datafile)로 구성
데이터 파일
세그먼트
- 특정 DB 객체(테이블, 인덱스, 파티션, LOB)에 할당된 익스텐트들의 집합
- 객체 1개 = 세그먼트 1개 원칙
- 테이블 생성시
- 테이블 세그먼트는 항상 생성
- 인덱스 세그먼트는 PK/UNIQUE 제약조건, 명시적 인덱스 생성이 있을때 생성
- 파티션 세그먼트는 파티션 정의 시 생성
- 테이블 또는 인덱스가 파티션 구조라면 각 파티션이 하나의 세그먼트가 된다.
- LOB 세그먼트는 LOB 컬럼 존재 시 생성
- 세그먼트 공간이 부족해지면, 테이블 스페이스로부터 익스텐트를 추가로 할당.
- 세그먼트에 할당된 모든 익스텐트가 같은 데이터 파일에 위치하지 않을수 있음.
- 하나의 테이블 스페이스를 여러 데이터 파일로 구성하면, 파일 경합을 줄이기 위해, DBMS가 데이터를 가능한 여러 데이터 파일로 분산해서 저장.
-- ① 기본 테이블
CREATE TABLE EMP (
EMPNO NUMBER PRIMARY KEY,
ENAME VARCHAR2(20)
);
-- 생성 세그먼트 : EMP(테이블), EMP_PK(인덱스)
-- ② LOB 추가
CREATE TABLE EMP_DOC (
EMPNO NUMBER PRIMARY KEY,
DOC CLOB
);
-- 생성 세그먼트 : EMP_DOC(테이블), EMP_DOC_PK(인덱스), EMP_DOC(DOC_LOB 세그먼트)
-- ③ 파티션 테이블
CREATE TABLE SALES (
SALE_ID NUMBER PRIMARY KEY,
SALE_DATE DATE,
AMOUNT NUMBER
)
PARTITION BY RANGE (SALE_DATE) (
PARTITION P2024 VALUES LESS THAN (DATE '2025-01-01'),
PARTITION P2025 VALUES LESS THAN (DATE '2026-01-01')
);
-- 생성 세그먼트 : SALES_P2024, SALES_P2025 (파티션별 세그먼트), SALES_PK 인덱스 세그먼트
익스텐트
- 여러 개의 블록 묶음 (연속된 블록들의 집합)
- 한 번에 할당/반납되는 단위 → 공간 관리 최소 단위
- 공간을 확장하는 단위 -> 데이터를 입력하다가 공간(세그먼트)이 부족해지면 객체가 속한 테이블 스페이스로 부터 익스텐트를 추가로 할당 받음.
- 하나의 익스텐트는 하나의 테이블(객체, 세그먼트)이 독점 -> 하나의 익스텐트에 저장된 모든 블록은 같은 테이블 블록임
- SQL Server는 소규모의 객체일때만 여러 객체가 한 익스텐트를 공유함(Mixed Extent)
- 익스텐트 내의 블록은 연속된 공간이지만, 익스텐트 끼리는 연속된 공간이 아님.
블록( = 페이지, DBMS에 따라)
- DB 저장의 최소 단위
- 실제 데이터가 기록되는 가장 작은 단위
- 하나의 블록은 하나의 테이블(객체, 세그먼트)이 독점 -> 하나의 블록에 저장된 레코드는 모두 같은 테이블 레코드다
- 다중 테이블 클러스터일때는 한 블록에 여러 테이블 레코드가 같이 저장될 수 있음.