Amazon Redshift 클러스터의 테이블이 예상과 다르게 디스크 스토리지 공간을 사용합니다. Amazon Redshift에서는 디스크 스토리지 공간과 테이블 크기가 어떻게 계산됩니까?

서로 다른 Amazon Redshift 클러스터에 있는 두 개의 테이블에 할당된 디스크 스토리지 공간의 양은 동일한 데이터 정의 언어(DDL) 선언문을 사용하여 테이블을 생성했으며 동일한 수의 행을 포함하더라도 상당히 다를 수 있습니다. 다음 시나리오에서 각 테이블이 소비하는 디스크 스토리지 공간의 차이는 다음과 같은 요소에 의해 결정됩니다.

  • 각 Amazon Redshift 클러스터의 채워진 조각 수
  • 각 테이블에서 사용하는 테이블 세그먼트의 수

최소 디스크 공간은 Amazon Redshift에서 테이블이 가질 수 있는 가장 작은 데이터 공간입니다. 최소 테이블 크기는 클러스터 스토리지 사용을 분석하거나 Amazon Redshift 클러스터를 크기 조정할 때 확인할 수 있습니다. 다음 공식을 사용하여 최소 디스크 공간을 계산할 수 있습니다.

  • KEY 또는 EVEN 배포 스타일을 사용하여 생성된 테이블의 경우:
    최소 테이블 크기 = 블록 크기(1MB) * (사용자 열_수 + 시스템 열 3개) * 채워진 조각 수 * 테이블 세그먼트 수.
  • ALL 배포 스타일을 사용하여 생성된 테이블의 경우:
    최소 테이블 크기 = 블록 크기(1MB) * (사용자 열 수 + 시스템 열 3개) * 클러스터 노드 수 * 테이블 세그먼트 수.

두 개의 Amazon Redshift 테이블이 다음 속성을 공유하는 경우:

  • 동일한 DDL 선언문으로 생성
  • 동일한 수의 행 포함
  • 수동으로 수정되지 않음

이 경우 테이블 디스크 스토리지 공간 할당은 다음 요소에 따라 달라질 수 있습니다.

  • EVEN 및 Key 배포 스타일의 경우, 테이블로 채워진 클러스터 조각의 수
  • ALL 배포 조각의 경우 클러스터의 노드 수
  • 테이블의 세그먼트 수

Amazon Redshift 테이블에 정렬 키가 있는 경우 테이블은 2개의 세그먼트(정렬된 세그먼트와 정렬되지 않은 세그먼트)를 가집니다. Amazon Redshift 테이블에 정렬 키가 없는 경우 모든 데이터는 정렬되지 않은 상태이므로 테이블은 하나의 정렬되지 않은 세그먼트를 가집니다.

정렬 키가 있는 기존 테이블에 데이터를 추가하면 VACUUM 작업이 실행될 때까지 정렬되지 않은 데이터(정렬된 원본 키 세그먼트에 삽입되지 않은 데이터)를 포함하는 별도의 세그먼트가 유지됩니다. 자세한 내용은 병합된 행의 볼륨 관리를 참조하십시오.

참고: VACUUM 작업은 해당 데이터를 정렬된 데이터와 병합합니다. 그러나 테이블은 추후 로드 작업을 위해 정렬되지 않은 세그먼트를 여전히 포함하고 있습니다.

테이블 세그먼트 수 변수는 Amazon Redshift 테이블에 할당되는 테이블 세그먼트의 수를 나타내는 세 가지 값 중 하나를 가집니다.

    0: 테이블이 로드된 적이 없습니다. 제로 테이블 세그먼트에 대한 디스크 공간을 할당합니다.

    1: 정렬 키가 없는 테이블이 한 번 이상 로드되었습니다.

    2: 정렬 키가 있는 테이블이 한 번 이상 로드되었습니다.

최소 테이블 크기 계산의 예

16개 조각의 클러스터의 테이블에 정렬 키를 포함한 125개의 사용자 열이 있는 경우 16개 조각을 모두 채우는 테이블이 가질 수 있는 최소 크기는 다음과 같이 계산됩니다.

1MB * (125 + 3) * 16 * 2 = 4096MB

테이블이 DDL 선언문으로 생성되었으며 테이블이 모두 채워진 2조각 클러스터에 상주하는 경우, 최소 테이블 크기 계산에 따르면 테이블이 상당히 더 적은 디스크 스토리지를 사용합니다.

1MB* (125 + 3)* 2 * 2 = 512MB

테이블이 동일한 DDL 선언문으로 생성되었으며 테이블이 채워진 64조각 클러스터에 상주하는 경우, 최소 테이블 크기 계산에 따르면 테이블은 상당히 더 많은 디스크 스토리지를 사용합니다.

1MB * (125 + 3) * 64 * 2 = 16384MB

최소 테이블 크기 예시와 같이, 클러스터의 채워진 조각 수를 기반으로 테이블 크기를 증가 또는 축소할 수 있습니다. 

1. 다음 쿼리를 사용하여 Amazon Redshift 클러스터에서 테이블에 할당된 디스크 공간의 양을 확인합니다.

SELECT ti.database,
      ti.schema||'.'||ti."table"AS tablename,
      ti.size
FROM svv_table_info ti;

2. 다음 쿼리를 실행하여 테이블의 최소 테이블 크기를 계산합니다.

WITH 
tbl_ids AS
(SELECT DISTINCT oid
FROM pg_class c
WHERE relowner>1
AND relkind='r'),
stp AS
(SELECT id,sum(ROWS)sum_r,sum(sorted_rows)sum_sr,min(ROWS)min_r,
max(ROWS)max_r,nvl(count(DISTINCT slice),0)pop_slices
FROM stv_tbl_perm
WHERE id IN (SELECT oid FROM tbl_ids)
AND slice<6400
GROUP BY id),
colenc AS
(SELECT attrelid,sum(CASE WHEN a.attencodingtype=0 THEN 0 ELSE 1 END)
AS encoded_cols,count(*)AS cols
FROM pg_attribute a
WHERE a.attrelid IN (SELECT oid FROM tbl_ids)
AND a.attnum>0
GROUP BY a.attrelid),
cluster_info AS
(SELECT COUNT(DISTINCT node) node_count
FROM stv_slices)
SELECT ti.database,
ti.schema||'.'||ti."table"AS tablename,
ti.diststyle,
ti.sortkey1,
ti.size current_size,
nvl(CASE
WHEN stp.sum_r=stp.sum_sr
OR stp.sum_sr=0 THEN CASE
WHEN"diststyle"='EVEN' THEN
CASE
WHEN ti.sortkey1 != '' THEN (stp.pop_slices*(colenc.cols+3)*2)
ELSE (stp.pop_slices*(colenc.cols+3))
END
WHEN substring("diststyle",1,3)='KEY' THEN
CASE
WHEN ti.sortkey1 != '' THEN (stp.pop_slices*(colenc.cols+3)*2)
ELSE (stp.pop_slices*(colenc.cols+3))
END
WHEN"diststyle"='ALL' THEN
CASE
WHEN ti.sortkey1 != '' THEN cluster_info.node_count*(colenc.cols+3)*2
ELSE cluster_info.node_count*(colenc.cols+3)
END
END
ELSE CASE
WHEN"diststyle"='EVEN'THEN(stp.pop_slices*2*(colenc.cols+3))
WHEN substring("diststyle",1,3)='KEY'
THEN(stp.pop_slices*(colenc.cols+3)*2)
WHEN"diststyle"='ALL'
THEN(cluster_info.node_count*(colenc.cols+3)*2)
END
END,0) AS minimum_size
FROM svv_table_info ti
LEFT JOIN stp ON stp.id=ti.table_id
LEFT JOIN colenc ON colenc.attrelid=ti.table_id
CROSS JOIN cluster_info
WHERE ti.schema NOT IN('pg_internal')
ORDER BY ti.size DESC;

고객의 사용 시나리오를 위한 최적의 클러스터 구성을 확인하려면 Amazon Redshift의 클러스터 및 노드데이터 웨어하우스 시스템 아키텍처를 참조하십시오.


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시된 날짜: 2016년 4월 15일

업데이트된 날짜: 2018년 7월 6일