각 Amazon Redshift 저장 블록의 크기는 1MB입니다. 각 블록에는 한 테이블 내의 하나의 열에 만 데이터가 들어 있습니다. SVV_DISKUSAGE
system view
이들 블록의리스트, 예를 포함
select db_id, trim(name) as tablename, col, tbl, max(blocknum)
from svv_diskusage
where name='salesnew'
group by db_id, name, col, tbl
order by db_id, name, col, tbl;
db_id | tablename | col | tbl | max
--------+------------+-----+--------+-----
175857 | salesnew | 0 | 187605 | 154
175857 | salesnew | 1 | 187605 | 154
175857 | salesnew | 2 | 187605 | 154
175857 | salesnew | 3 | 187605 | 154
175857 | salesnew | 4 | 187605 | 154
175857 | salesnew | 5 | 187605 | 79
175857 | salesnew | 6 | 187605 | 79
175857 | salesnew | 7 | 187605 | 302
175857 | salesnew | 8 | 187605 | 302
175857 | salesnew | 9 | 187605 | 302
175857 | salesnew | 10 | 187605 | 3
175857 | salesnew | 11 | 187605 | 2
175857 | salesnew | 12 | 187605 | 296
(13 rows)
각 열을 저장하는 데 필요한 블록 수있는 데이터의 양에 의존하고 그 표에 사용 compression encoding.
Amazon Redshift는 각 블록에 저장된 데이터의 minvalue
및 maxvalue
도 저장합니다. 이것은 SVV_DISKUSAGE
테이블에 표시됩니다. 이 값은 종종 영역 맵이라고하며 데이터를 검색 할 때 건너 뛸 수있는 블록을 식별하는 데 사용됩니다. 예를 들어 WHERE
절이 해당 열에서 5
값을 가진 행을 찾으면 minvalue
이 6
인 블록을 완전히 건너 뛸 수 있습니다. 이것은 데이터가 압축 될 때 특히 유용합니다. 데이터가 두 블록을 소비하는 이유
조사하기 위해 검사 :
사람들을에 저장된 각 블록
값의 수 (num_values
)의 maxvalue
값을 사용하면 각 블록에 저장된 데이터의 양과 예상과 일치하는지 여부를 알 수 있습니다. 또한 배포 키 (DISTKEY
)을 테이블에서 사용했습니다. DISTKEY
이 ALL
으로 설정된 경우 테이블 데이터는 여러 노드간에 복제됩니다. 이것은 또한 귀하의 블록 수를 설명 할 수 있습니다.
마지막으로 테이블에서 데이터가 삭제 된 경우 이전 값이 디스크 공간을 차지할 수 있습니다. 삭제 된 데이터를 제거하려면 테이블에서 VACUUM
명령을 실행하십시오.
좋은 참조는 다음과 같습니다. Why does a table in my Amazon Redshift cluster consume more disk storage space than expected?