728x90
1) 클러스터 구조와 기본 개념
클러스터(Cluster)
- 클러스터는 하나 이상의 테이블이 공유하는 저장 공간 구조입니다.
- 클러스터 키를 기준으로 동일한 값을 가지는 데이터들이 같은 데이터 블록에 저장됩니다.
클러스터 테이블(Clustered Table)
- 클러스터 내부에 속한 테이블입니다.
- 클러스터 키는 테이블 간 관계를 나타내며, 자주 조인되는 컬럼으로 설정합니다.
- 일반 테이블과 달리, 클러스터가 존재해야만 생성 가능합니다.
2) 동작 원리 (Index Cluster 기준)
예시: departments, employees 테이블이 dept_id 로 조인되는 경우
- 클러스터 생성(클러스터 키 = dept_id)
- 클러스터 인덱스 생성
- departments, employees 테이블을 클러스터에 포함시켜 생성
- dept_id = 10 인 부서와 소속된 모든 직원이 같은 블록에 저장됨
- SELECT * FROM employees e JOIN departments d ON e.dept_id = d.dept_id 수행 시
클러스터 키 dept_id 를 사용해 단 하나의 블록을 읽어서 관련 행을 모두 가져옴 → I/O 감소
3) 내부 저장 구조
데이터 블록 예시 (Cluster Block)
┌───────────────┐
│ dept_id = 10 │ ← 클러스터 키
├───────────────┤
│ departments │
│ → dept_id=10 │
│ → dept_name=X │
├───────────────┤
│ employees │
│ → emp_id=100 │
│ → emp_name=Y │
│ → dept_id=10 │
│ ... │
└───────────────┘
- 이처럼 관련 데이터가 물리적으로 인접하게 저장되어 디스크 I/O 성능 향상이 기대됩니다.
4) 데이터 접근 방식
| 작업 유형 | 동작 방식 |
| INSERT | 클러스터 키의 Index / Hash를 통해 적절한 블록에 삽입 |
| SELECT (조인) | 클러스터 키로 블록 한 개만 읽으면 두 테이블의 데이터 동시 조회 가능 |
| UPDATE / DELETE | 클러스터 키 기반으로 위치 탐색 후 작업 수행 |
| FULL SCAN | 일반 테이블보다 비효율적일 수 있음 (블록 당 데이터 밀도 ↑) |
5) 성능 특성
| 장점 | 단점 |
| 자주 조인되는 테이블의 I/O 감소 → 빠른 조회 | 클러스터 키가 자주 변경되면 오버헤드 ↑ |
| 공간 절약 (중복 키 저장 X) | DML 성능은 다소 떨어질 수 있음 |
| 클러스터 키 기반 데이터 지역성 확보 | 테이블 drop/recreate 제약 있음 |
6) 클러스터의 두 가지 방식 비교
| 구분 | Index Cluster | Hash Cluster |
| 구조 | 클러스터 키 인덱스를 통해 블록 찾음 | 클러스터 키 → 해시 함수 → 블록 직접 계산 |
| 장점 | 유연하고 일반적 | 고속 랜덤 액세스 |
| 단점 | 인덱스 필요 | 크기 조정 어려움 (공간 미리 할당) |
7) 관련 뷰
| 뷰 | 설명 |
| DBA_CLUSTERS | 클러스터 정의 |
| DBA_TABLES | CLUSTER_NAME 컬럼으로 클러스터 테이블 여부 확인 |
| DBA_INDEXES | TABLE_NAME 컬럼으로 클러스터 인덱스 여부 확인 |
728x90