본문 바로가기

카테고리 없음

[Oracle] Oracle 클러스터 테이블(Clustered Tables) 완벽 가이드

반응형

클러스터 테이블은 관련된 데이터를 물리적으로 같은 위치에 저장하여 조인 성능을 최적화하는 Oracle의 특별한 저장 구조입니다.

1. 클러스터 테이블 개요

1.1 주요 특징

  • 관련 데이터를 같은 데이터 블록에 저장
  • 조인 성능 향상
  • 디스크 I/O 감소
  • 저장 공간 효율성 향상

1.2 클러스터 유형

  1. 인덱스 클러스터
    • 클러스터 키에 인덱스 사용
    • 가장 일반적인 유형
  2. 해시 클러스터
    • 해시 함수로 데이터 위치 결정
    • 정확한 일치 검색에 최적화

2. 클러스터 테이블 생성

2.1 인덱스 클러스터

-- 클러스터 생성
CREATE CLUSTER emp_dept_cluster (
    department_id NUMBER(4)
)
SIZE 1024
TABLESPACE users;

-- 클러스터 인덱스 생성
CREATE INDEX idx_emp_dept_cluster 
ON CLUSTER emp_dept_cluster;

-- 클러스터의 첫 번째 테이블 생성
CREATE TABLE departments (
    department_id NUMBER(4) PRIMARY KEY,
    department_name VARCHAR2(30),
    location_id NUMBER(4)
)
CLUSTER emp_dept_cluster (department_id);

-- 클러스터의 두 번째 테이블 생성
CREATE TABLE employees (
    employee_id NUMBER(6) PRIMARY KEY,
    first_name VARCHAR2(20),
    department_id NUMBER(4),
    salary NUMBER(8,2)
)
CLUSTER emp_dept_cluster (department_id);

2.2 해시 클러스터

-- 해시 클러스터 생성
CREATE CLUSTER order_cluster (
    order_id NUMBER(10)
)
SIZE 1024
HASHKEYS 10000;

-- 해시 클러스터의 테이블 생성
CREATE TABLE orders (
    order_id NUMBER(10) PRIMARY KEY,
    customer_id NUMBER(10),
    order_date DATE
)
CLUSTER order_cluster (order_id);

CREATE TABLE order_items (
    order_id NUMBER(10),
    line_item_id NUMBER(4),
    product_id NUMBER(10),
    quantity NUMBER(8)
)
CLUSTER order_cluster (order_id);

3. 활용 사례

3.1 부서-직원 데이터 클러스터링

-- 클러스터 생성
CREATE CLUSTER hr_cluster (
    dept_id NUMBER(4)
)
SIZE 1024
TABLESPACE users;

CREATE INDEX idx_hr_cluster ON CLUSTER hr_cluster;

-- 부서 테이블
CREATE TABLE dept (
    dept_id NUMBER(4) PRIMARY KEY,
    dept_name VARCHAR2(30)
)
CLUSTER hr_cluster (dept_id);

-- 직원 테이블
CREATE TABLE emp (
    emp_id NUMBER(6) PRIMARY KEY,
    emp_name VARCHAR2(50),
    dept_id NUMBER(4)
)
CLUSTER hr_cluster (dept_id);

-- 클러스터 테이블 조회
SELECT e.emp_name, d.dept_name
FROM emp e, dept d
WHERE e.dept_id = d.dept_id;

3.2 주문-주문상세 클러스터링

-- 해시 클러스터 생성
CREATE CLUSTER sales_cluster (
    order_no NUMBER(10)
)
SIZE 1024
HASHKEYS 100000;

-- 주문 테이블
CREATE TABLE orders (
    order_no NUMBER(10) PRIMARY KEY,
    order_date DATE,
    customer_id NUMBER(10)
)
CLUSTER sales_cluster (order_no);

-- 주문상세 테이블
CREATE TABLE order_details (
    order_no NUMBER(10),
    line_no NUMBER(4),
    product_id NUMBER(10),
    quantity NUMBER(8)
)
CLUSTER sales_cluster (order_no);

4. 성능 최적화

4.1 클러스터 크기 설정

-- 적절한 클러스터 크기 설정
CREATE CLUSTER customer_order_cluster (
    customer_id NUMBER(10)
)
SIZE 8192  -- 8K 블록 크기
TABLESPACE users;

4.2 해시 키 개수 설정

-- 예상 데이터량을 고려한 해시 키 설정
CREATE CLUSTER product_cluster (
    product_id NUMBER(10)
)
SIZE 4096
HASHKEYS 50000  -- 예상 제품 수의 1.5배
TABLESPACE users;

5. 모니터링 및 관리

5.1 클러스터 정보 조회

-- 클러스터 정보 확인
SELECT cluster_name, cluster_type, key_size
FROM USER_CLUSTERS;

-- 클러스터 사용량 확인
SELECT cluster_name, tablespace_name,
       avg_blocks_per_key, avg_data_blocks_per_key
FROM USER_CLUSTERS;

5.2 클러스터 통계 수집

-- 클러스터 통계 수집
BEGIN
    DBMS_STATS.GATHER_CLUSTER_STATS(
        ownname => 'SCOTT',
        clustname => 'EMP_DEPT_CLUSTER',
        estimate_percent => 100
    );
END;
/

6. 설계 고려사항

6.1 클러스터 사용이 적합한 경우

  1. 자주 조인되는 테이블들
    • 부서-직원
    • 주문-주문상세
    • 고객-주소
  2. 클러스터 키로 주로 조회하는 경우
    • 1:N 관계에서 부모 테이블 기준 조회
    • 특정 키값으로 관련 데이터를 한꺼번에 조회

6.2 클러스터 사용을 피해야 하는 경우

  1. 데이터가 자주 변경되는 경우
  2. 클러스터 키가 아닌 컬럼으로 주로 조회하는 경우
  3. 테이블 간 관계가 복잡한 경우

7. 성능 분석

7.1 실행 계획 분석

-- 클러스터 테이블 조인 실행 계획
EXPLAIN PLAN FOR
SELECT e.emp_name, d.dept_name
FROM emp e, dept d
WHERE e.dept_id = d.dept_id;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

7.2 클러스터 효율성 분석

-- 클러스터 체인 분석
SELECT chain_cnt, avg_chain_len
FROM USER_CLUSTER_HASH_EXPRESSIONS
WHERE cluster_name = 'ORDER_CLUSTER';

8. 베스트 프랙티스

  1. 클러스터 키 선택
    • 적절한 카디널리티
    • 자주 사용되는 조인 조건
    • 변경이 적은 컬럼
  2. 크기 설정
    • 평균 로우 크기 고려
    • 예상 성장률 반영
    • 적절한 버퍼링 팩터
  3. 유지보수
    • 정기적인 통계 수집
    • 체인 발생 모니터링
    • 주기적인 재구성 검토

클러스터 테이블은 관련된 데이터를 물리적으로 가깝게 저장함으로써 조인 성능을 크게 향상시킬 수 있는 강력한 기능입니다. 하지만 적절한 사용 케이스 선정과 세심한 설계가 성공적인 구현의 핵심입니다. 특히 데이터의 접근 패턴과 변경 빈도를 충분히 고려하여 클러스터 사용 여부를 결정해야 합니다.

반응형