본문 바로가기

Server Infra/AWS

Amazon Redshift VACUUM 관련

728x90

VACUUM이란?

VACUUM은 PostgreSQL에서만 사용하는 고유의 명령어 입니다. PostgreSQL은 특정 ROW 업데이트시 디스크의 해당 ROW를 물리적으로 업데이트 하는게 아닌 새로운 영역을 할당해서 사용합니다. Update, Delete또한 해당 영역을 재사용하지 않습니다. 그렇기에 오래된 영역을 재 사용하거나 정리해주는 작업이 필요한데 이게 VACUUM입니다. 현재 데이터베이스에서 지정된 테이블이나 모든 테이블의 공간을 회수하고 행을 다시 정렬합니다. 마치, JVM의 GC같은 녀석이다.

 

Amazon Redshift VACUUM 명령 구문과 동작은 PostgreSQL VACUUM 작업과는 크게 다릅니다. 예를 들어 Amazon Redshift의 기본 VACUUM 작업은 VACUUM FULL로서, 디스크 공간을 회수하고 모든 열을 다시 정렬합니다. 이와는 달리, PostgreSQL에서 기본 VACUUM 작업은 단순히 공간을 회수하여 재사용할 수 있게 만듭니다.

  • Amazon Redshift 는 백그라운드에서 테이블을 자동으로 정렬하고 VACUUM DELETE 작업을 수행할 수 있습니다. 로드 또는 일련의 증분 업데이트 후 테이블을 정리하기 위해 전체 데이터베이스 또는 개별 테이블에 대해 VACUUM 명령을 실행할 수도 있습니다.
  • 테이블 소유자 또는 수퍼유저만 테이블을 효과적으로 청소할 수 있습니다.
  • BOOST 옵션은 사용 가능한 메모리 및 디스크 공간과 같은 추가 리소스를 VACUUM에 할당합니다.

Redshift또한 PostgreSQL기반으로 만들어진 녀석이기에 VACUUM을 잘 이해하고 테이블을 설계 및 사용해야합니다.

아래와 같은 상황인 경우 DW의 속도가 느려집니다

  • 정렬되지 않은 데이터 비율이 높은 경우
  • 열이 너무 많은 큰 테이블인 경우
  • 인터리브 정렬 키 사용
  • 불규칙하거나 드물게 VACUUM을사용 하는 경우 
  • 동시 테이블, 클러스터 쿼리, DDL 문 또는 ETL 작업이 많은경우

물론, Redshift는 기본적으로 백그라운드에서 자동으로 데이터를 정렬하고 VACUUM DELETE를 실행합니다. 이렇게 하면 VACUUM명령어 실행할 필요성이 줄어듭니다. 또한 테이블 행이 95%이상 정렬되어 있다면 VACUUM에서 정렬단계를 건너 뛰기 때문에 성능을 상당히 개선할 수 있습니다.

728x90