1. 배포 스타일 (Distribution Style)
- EVEN: 기본값으로, 데이터를 테이블의 모든 슬라이스에 균등하게 분산.
- KEY: 지정된 컬럼의 값을 기준으로 데이터를 분산. 조인이 자주 발생하는 컬럼에 사용.
- ALL: 모든 슬라이스에 모든 데이터를 복제. 작은 테이블에 유용.
CREATE TABLE my_table (
id INT,
data VARCHAR(255)
)
DISTSTYLE KEY
DISTKEY(id);
2. 정렬 키 (Sort Keys)
- Compound Sort Key: 지정된 순서대로 정렬. 쿼리에서 정렬 키의 첫 번째 컬럼을 자주 사용할 때 유용.
- Interleaved Sort Key: 정렬 키의 모든 컬럼에 균등하게 가중치를 부여하여 정렬. 다양한 쿼리에 적합.
CREATE TABLE my_table (
id INT,
date TIMESTAMP,
data VARCHAR(255)
)
COMPOUND SORTKEY (id, date);
3. 압축 인코딩 (Compression Encoding)
- 컬럼별로 적절한 압축 인코딩을 사용하여 저장 공간을 절약하고 쿼리 성능을 향상.
- ANALYZE COMPRESSION 명령어를 사용하여 테이블의 최적 인코딩을 추천.
CREATE TABLE my_table (
id INT ENCODE lzo,
data VARCHAR(255) ENCODE zstd
);
4. 조인 성능 최적화
- 조인되는 컬럼에 동일한 배포 스타일을 사용하여 데이터 이동을 최소화.
- 조인 키에 인덱스를 생성하지 않아도 조인 성능을 최적화할 수 있다.
SELECT a.*, b.*
FROM table_a a
JOIN table_b b ON a.id = b.id
WHERE a.date > '2024-01-01';
5. WLM (Workload Management) 구성
- WLM을 사용하여 쿼리 성능을 향상시킬 수 있다.
- 쿼리를 그룹화하고 각 그룹에 리소스를 할당하여 작업을 관리한다.
CREATE TABLE my_table (
id INT,
data VARCHAR(255)
)
DISTSTYLE EVEN;
6. 데이터 분할 (Data Distribution)
- 데이터를 적절히 분할하여 각 슬라이스에 균등하게 분배되도록 한다.
- 데이터 스키마 설계 시 분할 키와 정렬 키를 신중히 선택합니다.
7. VACUUM 및 ANALYZE 명령어
- 테이블의 정렬을 유지하고 통계를 최신 상태로 유지하기 위해 VACUUM 및 ANALYZE 명령어를 주기적으로 실행한다.
VACUUM FULL my_table;
ANALYZE my_table;
8. 백업 및 복원
- Redshift는 자동 스냅샷을 지원하지만, 중요한 데이터를 백업하고 복원 전략을 마련하는 것을 권장.
참고자료