Amazon Redshift: DISTKEY와 SORTKEY 정리

Q·2024년 5월 9일
0

AWS

목록 보기
11/15

1. DISTKEY (데이터 분배 키)

개념

  • DISTKEY는 데이터를 Redshift의 슬라이스(Slice)에 어떻게 분배할지를 결정하는 키.

  • Redshift는 해시 기반 분배(hash distribution)를 사용.

    • 특정 컬럼(DISTKEY)에 대해 내부 해시 함수가 실행되고 → 결과 값에 따라 특정 슬라이스에 저장.
    • 동일한 해시 함수가 적용되므로, 같은 키 값은 항상 같은 슬라이스에 저장됨.

예시

CREATE TABLE fact_sales (
    user_id BIGINT DISTKEY,
    product_id BIGINT,
    price INT
);

CREATE TABLE user_profile (
    user_id BIGINT DISTKEY,
    product_id BIGINT,
    price INT
);

SELECT s.user_id, s.price, u.age
FROM fact_sales s
JOIN user_profile u
ON s.user_id = u.user_id;
  • fact_sales.user_id = 123 → 슬라이스 3번
  • user_profile.user_id = 123 → 슬라이스 3번
  • 따라서, 같은 user_id는 서로 다른 테이블이라도 같은 슬라이스에 저장됨.

성능 최적화 효과

  • 같은 슬라이스에 데이터가 있으므로 JOIN 시 cross-node shuffle 불필요.
  • 로컬 조인(local join) 가능 → 성능 대폭 향상.
  • 따라서 JOIN이 자주 발생하는 키를 DISTKEY로 지정하는 것이 좋음.

주의점

  • 특정 키 값에 데이터가 몰리면(slanted distribution) 특정 슬라이스만 과부하 발생 → 데이터 스큐(skew) 문제.
  • 데이터 분포가 균등하지 않을 경우, EVEN(라운드 로빈) 또는 ALL(작은 테이블 전체 복제) 전략 사용.

노드와 슬라이스

  • 노드(Node): 클러스터를 구성하는 서버 단위.

  • 슬라이스(Slice): 노드 내부의 데이터 분배/처리 단위.

    • 노드 타입에 따라 슬라이스 개수가 고정.
    • 예: ra3.4xlarge → 노드당 12 슬라이스, ds2.xlarge → 노드당 2 슬라이스.

2. SORTKEY (데이터 정렬 키)

개념

  • SORTKEY는 슬라이스 내부에서 데이터를 정렬하는 기준 컬럼.
  • DISTKEY로 분배된 후, 각 슬라이스 내부에서 지정된 SORTKEY 기준으로 정렬 저장.

예시

CREATE TABLE fact_sales (
  user_id BIGINT,
  order_date DATE,
  amount BIGINT
)
DISTKEY(user_id)
SORTKEY(order_date);
  • DISTKEY(user_id) → 동일한 user_id는 같은 슬라이스에 저장.
  • SORTKEY(order_date) → 각 슬라이스 내부에서 order_date 기준으로 정렬.

성능 최적화 효과

  1. 범위 검색 최적화

    • BETWEEN, <, > 조건에서 필요한 블록만 스캔.
    • Full Scan 방지 → I/O 감소.
    • 날짜/시간 컬럼에 많이 사용.
  2. 조인 최적화

    • SORTKEY가 동일한 테이블끼리 JOIN 시, 이미 정렬된 상태라 병합 조인(Merge Join) 가능.
  3. 압축 효율성 증가

    • 값의 연속성이 높아져 압축률 상승 → 스토리지 절감.

주의점

  • SORTKEY는 단일 컬럼 또는 복합 컬럼 지정 가능.
  • 데이터가 계속 append-only로 들어가면 정렬 효율이 낮아질 수 있음 → VACUUM 필요.

3. 요약

  • DISTKEY: 데이터를 슬라이스에 어떻게 분배할지 결정 (분산 전략).
  • SORTKEY: 슬라이스 내부에서 데이터를 어떤 순서로 정렬할지 결정 (검색/조인 최적화).

👉 DISTKEY는 데이터 분산 효율성, SORTKEY는 쿼리 효율성을 위한 키이다.

profile
Data Engineer

0개의 댓글