Amazon Redshift 클러스터의 테이블이 예상보다 많거나 적은 디스크 스토리지 공간을 소비하는 이유는 무엇인가요?

최종 업데이트 날짜: 2020년 11월 24일

테이블이 예상보다 많은 디스크 공간을 차지하고 있거나 클래식 크기 조정 후 사용 가능한 디스크 공간의 비율이 증가하지 않았습니다. Amazon Redshift는 디스크 스토리지 및 테이블 크기를 어떻게 계산하나요?

해결 방법

최소 테이블 크기 확인

최소 테이블 크기는 Amazon Redshift 클러스터에서 테이블의 최소 설치 공간입니다. 최소 테이블 크기는 클러스터 스토리지 사용을 분석하거나 Amazon Redshift 클러스터를 크기 조정할 때 확인할 수 있습니다.

KEY, EEN 또는 자동(EVEN) 배포 스타일을 사용하여 생성된 테이블의 경우 다음 공식을 사용합니다.

Minimum table size = block_size (1 MB) *
(number_of_user_columns + 3 system columns) * number_of_populated_slices * number_of_table_segments

ALL 또는 자동(ALL) 배포 스타일을 사용하여 생성된 테이블의 경우 다음 공식을 사용합니다.

Minimum table size = block_size (1 MB) *
(number_of_user_columns + 3 system columns) * number_of_cluster_nodes * number_of_table_segments

테이블 수식의 경우 세그먼트 수는 테이블에 정의된 정렬 키가 있는지 여부에 따라 결정됩니다. Amazon Redshift 테이블에 정의된 정렬 키가 있는 경우 테이블은 2개의 세그먼트(정렬된 세그먼트와 정렬되지 않은 세그먼트)를 가집니다. Amazon Redshift 테이블에 정렬 키가 없는 경우 테이블은 정렬되지 않은 세그먼트를 하나만 생성합니다.

다음 쿼리를 사용하여 채워진 조각 수를 계산할 수 있습니다.

select count(distinct a.slice) as
number_of_populated_slices, b."table" from stv_blocklist a,
svv_table_info b where a.tbl = b.table_id group by b."table" ;

예: 6개의 dc2.large 클러스터

예를 들어 동일한 구조와 행 수를 가진 4개의 작은 테이블로 6개의 dc2.large 클러스터를 생성할 수 있습니다. 클러스터에서 3가지 배포 스타일과 정렬 키가 있는 하나의 배포 스타일을 사용하는 경우 다른 쿼리가 사용됩니다.

다음 쿼리는 ALL 배포 스타일과 채워진 조각 6개의 출력으로 테이블을 생성합니다.

create table testsize_all (a varchar(100),b varchar(100), c
varchar(100)) diststyle all;
insert into testsize_all values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');

다음 쿼리는 EVEN 배포 스타일과 채워진 조각 6개의 출력으로 테이블을 생성합니다.

create table testsize_even (a varchar(100),b varchar(100), c
varchar(100)) diststyle even;
insert into testsize_even values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');

다음 쿼리는 하나의 배포 스타일과 채워진 조각 1개의 출력으로 테이블을 생성합니다.

create table testsize_key (a varchar(100),b varchar(100), c
varchar(100)) distkey (a);
insert into testsize_key values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');

다음 쿼리는 하나의 배포 스타일, 정렬 키 및 채워진 조각 6개의 출력으로 테이블을 생성합니다.

create table testsize_sort_even (a varchar(100),b
varchar(100), c varchar(100) ) diststyle even sortkey (a);
insert into testsize_sort_even values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');

최소 테이블 크기 계산

EEN 배포 스타일에 대한 최소 테이블 크기를 계산하려면 다음 공식을 사용합니다.

Minimum table size = block_size (1 MB) *
(number_of_user_columns + 3 system columns) * number_of_populated_slices *
number_of_table_segments
1MB * (3+3) * 6 *1 = 36MB

ALL 배포 스타일에 대한 최소 테이블 크기를 계산하려면 다음 공식을 사용합니다.

Minimum table size = block_size (1 MB) *
(number_of_user_columns + 3 system columns) * number_of_cluster_nodes *
number_of_table_segments
1MB * (3+3) * 6 *1 = 36 MB

KEY 배포 스타일에 대한 최소 테이블 크기를 계산하려면 다음 공식을 사용합니다.

Minimum table size = block_size (1 MB) * (number_of_user_columns
+ 3 system columns) * number_of_populated_slices * number_of_table_segments
1MB * (3+3) * 1 *1 = 6MB

정렬 키를 사용하는 균등 배포에 대한 최소 테이블 크기를 계산하려면 다음 공식을 사용합니다.

Minimum table size = block_size (1 MB) *
(number_of_user_columns + 3 system columns) * number_of_populated_slices *
number_of_table_segments
1MB * (3+3) * 6 *2 = 72MB

계산에서 알 수 있듯이 적은 수의 행이 삽입되면 테이블 크기가 예상보다 큽니다. 행 수가 삽입되고 채워진 조각 수가 늘어남에 따라 테이블 크기가 계속 커집니다.

클래식 크기 조정이 수행되면 테이블에 대한 데이터 볼륨이 증가하지 않고 채워진 조각 수가 증가합니다. 결과적으로 크기 조정 후 여유 공간의 양은 선형으로 증가하지 않습니다.