VACUUM - Amazon Redshift

VACUUM

현재 데이터베이스에서 지정된 테이블이나 모든 테이블의 공간을 회수하고 행을 다시 정렬합니다.

참고

필요한 테이블 권한이 있는 사용자만 테이블을 유효하게 정리(vacuum)할 수 있습니다. 필요한 테이블 권한 없이 VACUUM을 실행할 경우 작업은 성공적으로 완료되지만 아무런 효과도 없습니다. VACUUM을 유요하게 실행하기 위한 유효한 테이블 권한 목록은 다음 필수 권한 섹션을 참조하세요.

Amazon Redshift는 백그라운드에서 자동으로 데이터를 정렬하고 VACUUM DELETE를 실행합니다. 이렇게 하면 VACUUM 명령을 실행할 필요성이 줄어듭니다. 자세한 내용은 테이블 Vacuum 단원을 참조하십시오.

기본적으로 VACUUM은 테이블 행의 95% 이상이 이미 정렬된 테이블에 대해서는 정렬 단계를 건너뜁니다. 정렬 단계를 건너뛰면 VACUUM 성능을 상당히 개선할 수 있습니다. 단일 테이블의 기본 정렬 또는 삭제 임계값을 변경하려면 VACUUM을 실행할 때 테이블 이름과 TO threshold PERCENT 파라미터를 포함시킵니다.

테이블이 vacuum되는 동안 사용자는 테이블에 액세스할 수 있습니다. 테이블이 vacuum되는 중에도 쿼리 및 쓰기 작업을 수행할 수 있지만 DML(Data Manipulation Language)과 vacuum이 동시에 실행될 경우 두 작업 모두 시간이 더 걸릴 수 있습니다. vacuum 도중에 UPDATE 및 DELETE 문을 실행하는 경우 시스템 성능이 저하될 수 있습니다. VACUUM DELETE는 업데이트 작업과 삭제 작업을 임시로 차단합니다.

Amazon Redshift는 DELETE ONLY vacuum을 백그라운드로 수행합니다. 사용자가 ALTER TABLE 같은 DDL(Data Definition Language) 작업을 실행할 경우 자동 vacuum 작업은 일시 중지됩니다.

참고

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

자세한 내용은 테이블 Vacuum 단원을 참조하십시오.

필수 권한

VACUUM에 필요한 권한은 다음과 같습니다.

  • 수퍼유저

  • VACUUM 권한이 있는 사용자

  • 테이블 소유자

  • 테이블이 공유되는 데이터베이스 소유자

구문

VACUUM [ FULL | SORT ONLY | DELETE ONLY | REINDEX | RECLUSTER ] [ [ table_name ] [ TO threshold PERCENT ] [ BOOST ] ]

파라미터

FULL

지정된 테이블(또는 현재 데이터베이스의 모든 테이블)을 정렬하고 이전 UPDATE 및 DELETE 작업에서 삭제 표시가 된 행이 점유한 디스크 공간을 회수합니다. VACUUM FULL이 기본값입니다.

전체를 비우는(full vacuum) 작업에서는 인터리브된 테이블에 대해 인덱스 재지정을 수행하지 않습니다. 인터리브된 테이블의 인덱스 재지정을 수행한 후 전체를 비우려면 VACUUM REINDEX 옵션을 사용하십시오.

기본적으로 VACUUM FULL은 95% 이상이 이미 정렬된 테이블에 대해서는 정렬 단계를 건너뜁니다. VACUUM이 정렬 단계를 건너뛸 수 있는 경우에는 DELETE ONLY를 수행하고 삭제 단계에서 남아 있는 행의 95% 이상이 삭제 대기 상태가 되지 않도록 공간을 회수합니다. 

정렬 임계값이 충족되지 않고(예: 행의 90%가 정렬되는 경우) VACUUM이 전체 정렬을 수행하는 경우에는 완전 삭제 작업도 수행하여 100%의 삭제된 행으로부터 공간을 회수합니다.

단일 테이블에 대해서만 기본 vaccum 임계값을 변경할 수 있습니다. 단일 테이블의 기본 vacuum 임계값을 변경하려면 테이블 이름과 TO threshold PERCENT 파라미터를 포함시킵니다.

정렬 전용

행을 삭제하여 생긴 빈 공간을 회수하지 않고 지정된 테이블(또는 현재 데이터베이스의 모든 테이블)을 정렬합니다. 이 옵션은 디스크 공간 회수는 중요하지 않지만 새 행을 다시 정렬하는 것이 중요할 때 유용합니다. SORT ONLY vacuum은 정렬되지 않은 리전이 많은 수의 삭제된 행을 포함하지 않고 정렬된 리전 전체에 미치지 못할 때 vacuum 작업의 경과 시간을 줄여줍니다. 디스크 공간 제약 조건은 없지만 정렬된 테이블 행의 유지와 관련된 쿼리 최적화에 의존하는 애플리케이션은 이런 종류의 vacuum의 도움을 받을 수 있습니다.

기본적으로 VACUUM SORT ONLY는 이미 95% 이상 정렬되어 있는 테이블은 전부 건너뜁니다. 단일 테이블의 기본 정렬 임계값을 변경하려면 VACUUM을 실행할 때 테이블 이름과 TO threshold PERCENT 파라미터를 포함시킵니다.

DELETE ONLY

Amazon Redshift는 백그라운드에서 DELETE ONLY vacuum을 자동으로 수행하기 때문에 DELETE ONLY vacuum을 실행해야 하는 경우는 거의 없습니다.

VACUUM DELETE는 이전 UPDATE 및 DELETE 작업에서 삭제 표시가 된 행이 점유한 디스크 공간을 회수하고 테이블을 압축하여 사용된 공간을 확보합니다. DELETE ONLY vacuum 작업에서는 테이블 데이터를 정렬하지 않습니다.

디스크 공간 회수는 중요하지만 새 행을 다시 정렬하는 것이 중요하지 않을 때 이 옵션을 사용하면 VACUUM 작업의 경과 시간이 단축됩니다. 쿼리 성능이 이미 최적일 때도 이 옵션이 유용할 수 있으며, 쿼리 성능 최적화를 위해 행을 다시 정렬할 필요는 없습니다.

기본적으로, VACUUM DELETE ONLY는 나머지 행의 95% 이상이 삭제 표시되지 않도록 공간을 회수합니다. 단일 테이블의 기본 삭제 임계값을 변경하려면 VACUUM을 실행할 때 테이블 이름과 TO threshold PERCENT 파라미터를 포함시킵니다. 

ALTER TABLE APPEND 같은 일부 작업은 테이블을 분할시킬 수 있습니다. DELETE ONLY 절을 사용하면, vacuum 작업이 분할된 테이블에서 공간을 회수합니다. 조각 모음 작업에 동일한 기준 값인 95%가 적용됩니다.

REINDEX tablename

인터리브된 정렬 키 열의 값 분산을 분석한 다음 전체 VACUUM 작업을 수행합니다. REINDEX가 사용되는 경우 테이블 이름이 필요합니다.

VACUUM REINDEX는 인터리브된 정렬 키를 분석하기 위한 추가적인 패스를 만들기 때문에 VACUUM FULL보다 상당히 더 많은 시간이 소요됩니다. 인터리브된 정렬은 복합 정렬보다 많은 행을 다시 배열해야 하므로 정렬 및 병합 작업이 인터리브된 테이블에 대해 더 오래 걸릴 수 있습니다.

VACUUM REINDEX 작업이 완료되기 전에 종료되면 다음 번 VACUUM은 완전 vacuum 작업을 수행하기 전에 reindex 작업을 재개합니다.

VACUUM REINDEX는 TO threshold PERCENT와 함께 지원되지 않습니다. 

table_name

Vacuum을 수행할 테이블의 이름입니다. 테이블 이름을 지정하지 않을 경우 vacuum 작업은 현재 데이터베이스의 모든 테이블에 적용됩니다. 사용자가 만든 영구 또는 임시 테이블을 지정할 수 있습니다. 이 명령은 뷰 및 시스템 테이블과 같은 다른 객체에는 의미가 없습니다.

TO threshold PERCENT 파라미터를 포함하는 경우 테이블 이름은 필수입니다.

RECLUSTER tablename

정렬되지 않은 테이블 부분을 정렬합니다. 자동 테이블 정렬로 이미 정렬된 테이블 부분은 그대로 유지됩니다. 이 명령은 새로 정렬된 데이터를 정렬된 영역과 병합하지 않습니다. 또한 삭제 표시된 모든 공간을 회수하지 않습니다. 이 명령이 완료되면 SVV_TABLE_INFO의 unsorted 필드에 표시된 대로 테이블이 완전히 정렬되어 표시되지 않을 수 있습니다.

수집이 잦은 큰 테이블과 가장 최근 데이터에만 액세스하는 쿼리에는 VACUUM RECLUSTER를 사용하는 것이 좋습니다.

VACUUM RECLUSTER는 TO threshold PERCENT와 함께 지원되지 않습니다. RECLUSTER가 사용되는 경우 테이블 이름이 필요합니다.

VACUUM RECLUSTER는 인터리브 정렬 키가 있는 테이블 및 ALL 배포 스타일의 테이블에서 지원되지 않습니다.

table_name

Vacuum을 수행할 테이블의 이름입니다. 사용자가 만든 영구 또는 임시 테이블을 지정할 수 있습니다. 이 명령은 뷰 및 시스템 테이블과 같은 다른 객체에는 의미가 없습니다.

TO threshold PERCENT

VACUUM이 그 이상이 되면 정렬 단계를 건너뛰는 임계값과 삭제 단계에서 공간을 회수하기 위한 목표 임계값을 지정하는 절입니다. 정렬 임계값은 vacuum을 실행하기 전에 지정된 테이블에 대한 정렬 순서가 이미 지정되어 있는 전체 행의 비율입니다.  삭제 임계값은 vacuum 실행 후에 삭제 표시되지 않은 전체 행의 최소 비율입니다.

VACUUM은 테이블에서 정렬된 행의 비율이 정렬 임계값보다 낮을 때만 행을 다시 정렬하므로, Amazon Redshift는 종종 VACUUM 횟수를 상당히 줄일 수 있습니다. 마찬가지로, VACUUM이 삭제 표시된 행의 100%에서 공간을 회수하도록 제한되어 있지 않을 때는 몇 개의 삭제된 행만 포함한 블록 다시 쓰기를 건너뛸 수 있는 경우가 많습니다.

예를 들어, 임계값에 대해 75를 지정한 경우 VACUUM은 테이블 행의 75% 이상이 이미 정렬되어 있는 경우에 정렬 단계를 건너뜁니다. 삭제 단계의 경우, VACUUMS는 테이블 행의 75% 이상이 vacuum 후에 삭제 표시되지 않도록 디스크 공간 회수 목표를 설정합니다. 임계값은 0 ~ 100 사이의 정수여야 합니다. 기본값은 95입니다. 100의 값을 지정하는 경우 VACUUM은 이미 완전히 정렬되어 있지 않는 한 항상 테이블을 정렬하고 삭제 표시된 모든 행에서 공간을 회수합니다. 0의 값을 지정하는 경우 VACUUM은 테이블을 절대 정렬하지 않고 공간을 절대 회수하지 않습니다.

TO threshold PERCENT 파라미터를 포함하는 경우 테이블 이름도 지정해야 합니다. 테이블 이름이 생략된 경우 VACUUM은 실패합니다.

TO 임계값 PERCENT 파라미터를 REINDEX와 함께 사용할 수 없습니다.

BOOST

사용 가능한 메모리 및 디스크 공간과 같은 추가 리소스로 VACUUM 명령을 실행합니다. BOOST 옵션을 사용하면 VACUUM은 하나의 창에서 작동하며 VACUUM 작업 기간 동안 동시 삭제 및 업데이트를 차단합니다. BOOST 옵션을 사용하여 실행하면 시스템 리소스 경합이 발생하여 쿼리 성능에 영향을 줄 수 있습니다. 유지 보수 작업 등 시스템 부하가 적을 때 VACUUM BOOST를 실행하십시오.

BOOST 옵션을 사용할 때는 다음을 고려하십시오.

  • BOOST가 지정되면 table_name 값이 필요합니다.

  • BOOST는 REINDEX와 함께 사용할 수 없습니다.

  • DELETE ONLY를 사용할 경우 BOOST가 무시됩니다.

사용 노트

대부분의 Amazon Redshift 애플리케이션의 경우 완전 vacuum이 권장됩니다. 자세한 내용은 테이블 Vacuum 단원을 참조하십시오.

Vacuum 작업 실행 전, 다음 동작에 유의하십시오.

  • 트랜잭션 블록(BEGIN ... END) 내에서 VACUUM을 실행할 수 없습니다. 버전 관리에 대한 자세한 내용은 직렬화 가능 격리 단원을 참조하십시오.

  • 특정 시점에 클러스터당 한 개의 VACUUM 명령만 실행할 수 있습니다. 여러 vacuum 작업을 동시에 실행하려고 하면 Amazon Redshift가 오류를 반환합니다.

  • 테이블이 vacuum될 때 테이블 크기가 어느 정도 증가할 수도 있습니다. 이는 회수할 삭제된 행이 없거나 테이블의 새 정렬 순서로 인해 데이터 압축률이 낮아질 때 예상되는 동작입니다.

  • Vacuum 작업 중에는 쿼리 성능이 어느 정도 저하될 것으로 예상됩니다. Vacuum 작업이 완료되는 즉시 성능은 정상적인 수준으로 회복됩니다.

  • Vacuum 작업 중에 동시 쓰기 작업이 진행되지만 vacuum 중에는 쓰기 작업을 수행하지 않는 것이 좋습니다. Vacuum 실행 전에 쓰기 작업을 완료하는 것이 더 효율적입니다. 또한 vacuum 작업이 시작된 후에 기록된 데이터는 해당 작업으로 vacuum을 수행할 수 없습니다. 이 경우 두 번째 vacuum 작업이 필요합니다.

  • 로드 또는 삽입 작업이 이미 진행 중인 경우 vacuum 작업을 시작하지 못할 수도 있습니다. Vacuum 작업을 시작하려면 일시적으로 테이블에 배타적으로 액세스해야 합니다. 이런 배타적 액세스는 잠깐 필요할 뿐이므로, vacuum 작업이 상당한 시간 동안 동시 로드 및 삽입을 막는 것은 아닙니다.

  • 특정 테이블에 대해 수행할 작업이 없을 때는 vacuum 작업을 건너뛰지만, 작업을 건너뛸 수 있음을 발견하는 것과 관련된 오버헤드가 있습니다. 테이블이 초기 상태이거나 vacuum 임계값을 충족하지 못한다는 점을 알고 있다면 이 테이블에 대한 vacuum 작업을 실행하지 마십시오.

  • 작은 테이블에서의 DELETE ONLY vacuum 작업은 특히 테이블에 다수의 열이 있거나 클러스터가 노드당 많은 수의 조각을 사용할 때 데이터 저장에 사용되는 블록의 수를 줄이지 못할 수 있습니다. 이러한 vacuum 작업은 테이블로의 동시 삽입 수를 설명하기 위해 조각당 각 열에 한 개씩의 블록을 추가하고, 이 오버헤드가 회수된 디스크 공간에서 블록 수의 감소보다 많아질 가능성이 있습니다. 예를 들어 8개의 노드로 구성된 클러스터에 10개의 열이 있는 테이블이 vacuum 이전에 1,000개의 블록을 차지하고 있는 경우 삭제된 행 때문에 80개를 초과하는 블록의 디스크 공간이 회수되지 않을 경우 vacuum이 실제 블록 수를 줄여주지는 않습니다. (각 데이터 블록이 1MB씩 사용합니다.)

다음 중 어떤 조건이라도 충족이 될 경우 자동 vaccum 작업은 일시 중지됩니다.

  • 사용자가 ALTER TABLE 같이 현재 자동 vaccum이 작동 중인 테이블에 대해 단독 잠금이 필요한 데이터 정의 언어(DDL) 작업을 실행합니다.

  • 사용자가 클러스터의 어떤 테이블에서든 VACUUM을 트리거합니다(한 번에 오직 하나의 VACCUM만 실행 가능).

  • 클러스터 로드가 많은 기간입니다.

예시

기본값인 95%의 VACUUM 임계값을 기준으로 모든 테이블에서 공간과 데이터베이스를 회수하고 행을 다시 정렬합니다.

vacuum;

기본값인 95%의 임계값을 기준으로 SALES 테이블에서 공간을 회수하고 행을 다시 정렬합니다.

vacuum sales;

항상 SALES 테이블에서 공간을 회수하고 행을 다시 정렬합니다.

vacuum sales to 100 percent;

이미 정렬된 행 비율이 75% 미만인 경우에만 SALES 테이블의 행을 다시 정렬합니다.

vacuum sort only sales to 75 percent;

Vacuum 후에 남아 있는 행의 75% 이상이 삭제 표시되지 않도록 SALES 테이블에서 공간을 회수합니다.

vacuum delete only sales to 75 percent;

LISTING 테이블을 reindex한 다음 vacuum합니다.

vacuum reindex listing;

다음 명령은 오류를 반환합니다.

vacuum reindex listing to 75 percent;

LISTING 테이블을 다시 클러스터링한 다음 정리(vacuum)합니다.

vacuum recluster listing;

BOOST 옵션으로 LISTING 테이블을 다시 클러스터링한 다음 정리(vacuum)합니다.

vacuum recluster listing boost;