프로비저닝된 Amazon Redshift 클러스터의 테이블이 예상보다 많거나 적은 디스크 스토리지 공간을 소비하는 이유는 무엇인가요?
테이블이 예상보다 많은 디스크 공간을 차지하고 있거나 클래식 크기 조정 후 사용 가능한 디스크 공간의 비율이 증가하지 않았습니다. Amazon Redshift가 디스크 스토리지와 테이블 크기를 계산하는 방법을 알고 싶습니다.
해결 방법
최소 테이블 크기 확인
최소 테이블 크기는 Amazon Redshift 클러스터에서 테이블이 차지하는 가장 작은 공간입니다. 클러스터 스토리지 사용을 분석하거나 Amazon Redshift 클러스터의 크기를 조정할 때 최소 테이블 크기를 확인할 수 있습니다.
KEY, EVEN 또는 자동(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 테이블에 정의된 정렬 키가 있는 경우 테이블에는 정렬된 세그먼트 하나와 정렬되지 않은 세그먼트 하나, 이렇게 두 개의 세그먼트가 있습니다. Amazon Redshift 테이블에 정렬 키가 없는 경우 테이블은 정렬되지 않은 세그먼트를 하나만 생성합니다.
채워진 조각의 수를 계산하려면 다음 쿼리를 실행합니다.
select count(distinct a.slice) asnumber_of_populated_slices, b."table" from stv_blocklist a, svv_table_info b where a.tbl = b.table_id group by b."table" ;
예: six dc2.large cluster
예를 들어 구조와 행 수가 동일한 4개의 작은 테이블이 있는 6개의 dc2.large 클러스터를 만들 수 있습니다. 클러스터가 세 가지 다른 배포 스타일과 정렬 키가 있는 하나의 배포 스타일을 사용하는 경우 다른 쿼리가 사용됩니다.
다음 쿼리는 ALL 배포 스타일과 6개의 채워진 조각의 출력이 있는 테이블을 생성합니다.
create table testsize_all (a varchar(100),b varchar(100), cvarchar(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), cvarchar(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');
다음 쿼리는 배포 키와 채워진 조각 하나의 출력이 있는 테이블을 생성합니다.
create table testsize_key (a varchar(100),b varchar(100), cvarchar(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),bvarchar(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');
최소 테이블 크기 계산
EVEN 배포 스타일의 최소 테이블 크기를 계산하려면 다음 공식을 사용합니다.
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
적은 수의 행을 삽입하면 테이블 크기가 예상보다 커집니다. 삽입되는 행 수와 채워진 조각 수가 늘어남에 따라 테이블 크기도 계속 커집니다.
기본 크기 조정을 수행하면 테이블의 데이터 볼륨이 증가하지 않아도 채워진 조각 수가 늘어납니다. 따라서 크기 조정 후 여유 공간의 양은 선형적으로 증가하지 않습니다.
관련 정보
관련 콘텐츠
- 질문됨 9달 전lg...
- 질문됨 2년 전lg...
- 질문됨 9달 전lg...
- 질문됨 8년 전lg...
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 3년 전
- AWS 공식업데이트됨 5달 전