테이블 Vacuum - Amazon Redshift

테이블 Vacuum

Amazon Redshift는 백그라운드의 테이블에서 VACUUM DELETE 작업을 자동으로 정렬하고 수행할 수 있습니다. 로드 또는 일련의 증분적 업데이트 후 테이블을 정리하기 위해 전체 데이터베이스나 개별 테이블에 대해 VACUUM 명령을 실행할 수도 있습니다.

참고

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

이러한 이유로 필요에 따라 개별 테이블에 대해 VACUUM을 실행하는 것이 좋습니다. 또한 전체 데이터베이스에 대해 vacuum을 실행하면 비용이 많이 필요하므로 이 방법을 권장합니다.

자동 테이블 정렬

Amazon Redshift는 백그라운드에서 데이터를 자동으로 정렬하여 정렬 키 순서대로 테이블 데이터를 유지합니다. Amazon Redshift는 스캔 쿼리를 추적하여 정렬이 유용한 테이블 섹션을 결정합니다.

시스템의 로드에 따라 Amazon Redshift가 자동으로 정렬을 시작합니다. 이 자동 정렬은 데이터를 정렬 키 순서로 유지하기 위해 VACUUM 명령을 실행할 필요성을 줄입니다. 예를 들어 대량의 데이터 로드 후 정렬 키 순서로 전체 정렬된 데이터가 필요한 경우에도 VACUUM 명령을 수동으로 실행할 수 있습니다. 테이블이 VACUUM SORT 실행을 통해 이익을 얻을 수 있는지 확인하려면 SVV_TABLE_INFOvacuum_sort_benefit 열을 모니터링하십시오.

Amazon Redshift는 각 테이블에서 정렬 키를 사용하는 스캔 쿼리를 추적합니다. Amazon Redshift는 각 테이블에 대한 데이터 스캔 및 필터링 개선의 최대 비율을 추정합니다(테이블이 전체 정렬된 경우). 이 추정값은 SVV_TABLE_INFOvacuum_sort_benefit 열에서 볼 수 있습니다. 이 열을 unsorted 열과 함께 사용하면 테이블에서 VACUUM SORT를 수동으로 실행하여 쿼리가 이익을 얻을 수 있는 시기를 결정할 수 있습니다. 이 unsorted 열은 테이블의 물리적 정렬 순서를 반영합니다. vacuum_sort_benefit 열은 VACUUM SORT를 수동으로 실행하여 테이블 정렬의 영향을 지정합니다.

예를 들어 다음 쿼리를 고려해 보십시오.

select "table", unsorted,vacuum_sort_benefit from svv_table_info order by 1;
table | unsorted | vacuum_sort_benefit -------+----------+--------------------- sales | 85.71 | 5.00 event | 45.24 | 67.00

테이블 "sales"의 경우 테이블의 ~86%가 물리적으로 정렬되지 않은 경우에도 86%의 정렬되지 않은 테이블로부터 얻는 쿼리 성능 영향은 5%에 불과합니다. 이는 쿼리에서 테이블의 일부에만 액세스하거나 테이블에 액세스하는 쿼리가 거의 없기 때문일 수 있습니다. “event” 테이블의 경우, 테이블은 ~45%가 물리적으로 정렬되지 않았습니다. 그러나 쿼리 성능 영향이 67%라는 의미는 쿼리에서 테이블의 많은 부분에 액세스하거나 테이블에 액세스하는 쿼리 수가 많음을 나타냅니다. "event" 테이블은 VACUUM SORT를 실행할 때 이익을 얻을 가능성이 있습니다.

자동 vacuum 삭제

삭제를 수행하면 행이 삭제 표시되지만 제거되지는 않습니다. Amazon Redshift는 데이터베이스 테이블에서 삭제된 행 수를 기준으로 백그라운드에서 VACUUM DELETE 작업을 자동으로 실행합니다. Amazon Redshift는 로드가 감소한 기간 동안 VACUUM DELETE가 실행되도록 예약하고 부하가 많은 기간 동안 작업을 일시 중지합니다.

VACUUM 빈도

일관된 쿼리 성능을 유지하기 위해서는 필요할 때마다 자주 vacuum을 수행해야 합니다. VACUUM 명령을 얼마나 자주 실행할지 결정할 때는 다음 요인을 고려하십시오.

  • 저녁이나 지정된 데이터베이스 관리 기간 같이 클러스터에서의 활동이 최소일 것으로 예상되는 기간에 VACUUM을 실행합니다.

  • 유지 관리 기간 외 시간에 VACUUM 명령을 실행합니다. 자세한 내용은 유지 관리 기간 관련 일정을 참조하세요.

  • 정렬되지 않은 리전이 많으면 vacuum 시간이 길어집니다. vacuum을 연기하면 다시 정리해야 하는 데이터가 많아지기 때문에 vacuum에 더 많은 시간이 소요됩니다.

  • VACUUM은 I/O를 많이 사용하는 작업이므로 vacuum 완료까지 걸리는 시간이 길어질수록 클러스터에서 실행되는 동시 쿼리와 그 밖의 데이터베이스 작업에 미치는 영향이 커집니다.

  • 인터리브 정렬을 사용하는 테이블의 경우, VACUUM 시간이 길어집니다. 인터리브 테이블을 다시 정렬해야 하는지 평가하려면 SVV_INTERLEAVED_COLUMNS 보기를 쿼리합니다.

정렬 단계 및 병합 단계

Amazon Redshift는 2단계로 vacuum 작업을 수행합니다. 먼저 정렬되지 않은 리전의 행을 정렬한 다음 필요할 경우 테이블 끝에 있는 새로 정렬된 행을 기존의 행과 병합합니다. 큰 테이블을 vacuum하는 경우, vacuum 작업은 증분적 정렬 후 병합으로 구성되는 일련의 단계로 진행됩니다. 작업이 실패하거나 vacuum 도중 Amazon Redshift가 오프라인 상태가 되는 경우 부분적으로 vacuum된 테이블이나 데이터베이스는 일관된 상태가 되지만 vacuum 작업을 수동으로 다시 시작해야 합니다. 증분적 정렬은 손실되지만 실패 전에 커밋된 병합된 행들은 다시 vacuum할 필요가 없습니다. 정렬되지 않은 리전이 클 경우, 상당한 시간을 손해 볼 수 있습니다. 정렬 및 병합 단계에 대한 자세한 내용은 병합된 행의 볼륨 관리 섹션을 참조하세요.

테이블이 vacuum되는 동안 사용자는 테이블에 액세스할 수 있습니다. 테이블이 vacuum되는 중에도 쿼리 및 쓰기 작업을 수행할 수 있지만 DML과 vacuum이 동시에 실행되고 있을 때는 두 작업 모두 시간이 더 소요될 수 있습니다. vacuum 도중에 UPDATE 및 DELETE 문을 실행하는 경우 시스템 성능이 저하될 수 있습니다. 증분적 병합은 동시적인 UPDATE 작업과 DELETE 작업을 일시적으로 차단하며 UPDATE 작업과 DELETE 작업은 해당 테이블에서 증분적 병합 단계를 차단합니다. ALTER TABLE 같은 DDL 작업은 테이블의 vacuum 작업이 끝날 때까지 차단됩니다.

참고

VACUUM에 대한 다양한 수정자가 작동 방식을 제어합니다. 이를 사용하여 현재 요구 사항에 맞게 vacuum 작업을 조정할 수 있습니다. 예를 들어 VACUUM RECLUSTER를 사용하면 전체 병합 작업을 수행하지 않아 vacuum 작업이 단축됩니다. 자세한 내용은 VACUUM 단원을 참조하십시오.

vacuum 임계값

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

vacuum 유형

다양한 vacuum 유형에 대한 자세한 내용은 VACUUM 섹션을 참조하세요.