인터리브 정렬 키
인터리브 정렬 키는 정렬 키에서 각 열, 즉 열의 하위 집합에 똑같은 가중치를 부여합니다. 다수의 쿼리가 다른 열을 필터로 사용하는 경우에는 인터리브 정렬 키를 통해 쿼리의 성능을 높일 수 있는 경우가 종종 있습니다. 그 밖에 쿼리가 보조 정렬 열에서 제한적인 조건자를 사용할 때도 인터리브 정렬이 복합 정렬과 비교하여 쿼리 성능을 크게 높여주는 효과가 있습니다.
중요
자격 증명 열, 날짜, 타임스탬프와 같이 단순하게 증가하는 속성이 있는 열에서는 인터리브 정렬 키를 사용하지 마십시오.
단, 인터리브 정렬 키를 사용하여 향상되는 성능 이점과 로드 및 정리 시간이 늘어나는 문제를 서로 비교하여 검토해야 합니다.
인터리브 정렬은 WHERE 절에서 1개 이상의 정렬 키를 기준으로 필터링하여 선택의 폭이 매우 제한적인 쿼리를 실행할 때 가장 효과적입니다(예: select
c_name from customer where c_region = 'ASIA'
). 이때는 제한적으로 정렬되는 열의 수와 함께 인터리브 정렬의 이점도 커집니다.
인터리브 정렬은 대용량 테이블에서 더욱 효과적입니다. 각 슬라이스에 정렬이 적용됩니다. 따라서 인터리브 정렬은 테이블이 슬라이스당 여러 개의 1MB 블록을 요구할 만큼 충분히 클 때 가장 효과적입니다. 여기서 쿼리 프로세서는 제한적 조건자를 사용하여 블록을 상당 부분을 건너뛸 수 있습니다. 테이블이 사용하는 블록 수를 확인하려면 STV_BLOCKLIST 시스템 뷰에 대한 쿼리를 실행하십시오.
인터리브 정렬은 단일 열을 기준으로 정렬할 때 열 값에 긴 공통 접두사가 포함되어 있다면 복합 정렬보다 뛰어난 성능을 발휘할 수 있습니다. 예를 들어 URL은 공통적으로 "http://www"로 시작하기 마련입니다. 이때 복합 정렬 키는 접두사에서 사용할 수 있는 문자 수가 제한되어 있기 때문에 키가 중복되는 일이 다수 발생합니다. 하지만 인터리브 정렬은 영역 지도(zone map) 값에 내부 압축 방식을 사용하기 때문에 공통 접두사가 긴 열 값 사이에서도 쉽게 구분할 수 있습니다.
Amazon Redshift 프로비저닝된 클러스터를 Amazon Redshift Serverless로 마이그레이션할 때 Redshift 는 인터리브된 정렬 키와 DISTSTYLE KEY가 있는 테이블을 복합 정렬 키로 변환합니다. DISTSTYLE은 변경되지 않습니다. 배포 스타일에 대한 자세한 내용은 데이터 배포 스타일 사용을 참조하십시오.
VACUUM REINDEX
이미 데이터가 로드되어 정렬까지 마친 테이블에 행을 추가하면 시간이 지나면서 성능이 저하될 수 있습니다. 이러한 성능 저하는 복합 정렬과 인터리브 정렬에 모두 발생하지만 인터리브 테이블에 미치는 영향이 더욱 큽니다. VACUUM이 정렬 순서를 복원하기는 하지만 새로운 인터리브 데이터를 병합하려면 모든 데이터 블록을 수정해야 하는 경우도 있기 때문에 인터리브 테이블일 때 작업 시간이 더욱 오래 걸릴 수 있습니다.
Amazon Redshift는 테이블에 데이터를 처음 로드할 때 정렬 키 열의 값 분산을 분석한 후 해당 정보를 사용하여 정렬 키 열에서 최적의 인터리브를 구합니다. 이후 테이블 크기가 커지면 정렬 키 열의 값 분산도 특히 날짜 또는 타임스탬프 열에서 변동, 즉 스큐가 일어날 수 있습니다. 스큐가 너무 커지면 성능까지 영향을 받게 됩니다. 이때 정렬 키를 다시 분석하여 성능을 복원하려면 REINDEX 키워드와 함께 VACUUM 명령을 실행하십시오. 단, VACUUM REINDEX는 데이터에 대한 추가 분석이 필요하기 때문에 인터리브 테이블에 대한 표준 VACUUM보다 시간이 오래 걸릴 수 있습니다. KEY 분산 스큐와 마지막 REINDEX 시간에 대한 자세한 내용은 SVV_INTERLEAVED_COLUMNS 시스템 뷰에 대한 쿼리를 실행하여 확인할 수 있습니다.
VACUUM 실행 주기와 VACUUM REINDEX 실행 시점에 대한 자세한 내용은 reindex 실행 여부 결정 섹션을 참조하세요.