기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon Redshift의 쿼리 성능 요소
쿼리 성능에 영향을 미칠 수 있는 요인은 매우 많습니다. 다음에 나오는 데이터, 클러스터 및 데이터베이스 작업 측면은 모두 쿼리를 빠르게 처리하는 데 일조합니다.
테이블 속성
Amazon Redshift 테이블은 Amazon Redshift에 데이터를 저장하는 기본 단위이며, 각 테이블에는 동작과 접근성을 결정하는 속성 세트가 있습니다. 이러한 속성에는 정렬, 분산 스타일, 압축 인코딩 등이 포함됩니다. Amazon Redshift 테이블의 성능, 보안 및 비용 효율성을 최적화하려면 이러한 속성을 이해해야 합니다.
정렬 키
Amazon Redshift는 테이블의 정렬 키에 따라 정렬된 순서대로 디스크에 데이터를 저장합니다. 쿼리 옵티마이저와 쿼리 프로세서는 컴퓨팅 노드 내 데이터 배치 정보를 사용하여 스캔해야 하는 블록 수를 줄입니다. 이를 통해 처리할 데이터의 양을 줄여 쿼리 속도가 크게 향상됩니다. WHERE 절의 필터를 쉽게 사용하기 위해 정렬 키를 사용하는 것이 좋습니다. 자세한 내용은 Amazon Redshift 설명서의 정렬 키 작업을 참조하세요.
데이터 압축
데이터 압축은 스토리지 요구 사항을 줄여 디스크 I/O를 감소시키고 쿼리 성능을 개선합니다. 쿼리를 실행하면 압축된 데이터를 메모리로 읽은 후 쿼리 실행 도중 압축 해제합니다. 적은 데이터를 메모리에 로드하면 Amazon Redshift는 더 많은 메모리를 할당하여 데이터를 분석할 수 있습니다. 원주형 스토리지는 유사한 데이터를 순차적으로 저장하기 때문에 Amazon Redshift는 원주형 데이터 형식에 특별히 연결된 적응형 압축 인코딩을 적용할 수 있습니다. 테이블 열에서 데이터 압축을 활성화하는 가장 좋은 방법은 데이터로 테이블을 로드할 때 Amazon Redshift에서 최적의 압축 인코딩을 적용하는 AUTO 옵션을 사용하는 것입니다. 자동 데이터 압축 사용에 대한 자세한 내용은 Amazon Redshift 설명서의 자동 압축을 사용하여 테이블 로드를 참조하세요.
데이터 분산
Amazon Redshift는 테이블의 배포 스타일에 따라 테이블 데이터를 컴퓨팅 노드에 저장합니다. 쿼리를 실행하면 쿼리 옵티마이저가 필요에 따라 데이터를 컴퓨팅 노드로 다시 분산시켜 조인 및 집계를 실행합니다. 테이블에 적합한 분산 스타일을 선택하면 조인에 앞서서 데이터를 필요한 것에 배치하여 재분산 단계의 영향을 최소화하는 데 효과적입니다. 가장 일반적인 조인을 쉽게 사용하기 위해 배포 키를 사용하는 것이 좋습니다. 자세한 내용은 Amazon Redshift 설명서의 데이터 분산 스타일 작업을 참조하세요.
테이블 유지 관리
Amazon Redshift는 대부분의 워크로드에 대해 바로 업계 최고의 성능을 제공하지만 Amazon Redshift 클러스터를 잘 실행하려면 유지 관리가 필요합니다. 데이터를 업데이트하고 삭제하면 배큠 처리해야 하는 데드 행이 생성되며 추가 순서가 정렬 키와 일치하지 않는 경우 추가 전용 테이블도 재정렬해야 합니다.
Vacuum
Amazon Redshift의 배큠 처리 프로세스는 Amazon Redshift 클러스터의 상태 및 유지 관리에 필수적입니다. 또한 쿼리 성능에도 영향을 미칩니다. 삭제 및 업데이트가 모두 이전 데이터에 플래그를 지정하지만 실제로 제거하지는 않으므로 이전 UPDATE 및 DELETE 작어에 의해 삭제할 항목으로 표시된 테이블 행이 차지하는 디스크 공간을 회수하기 위해 배큠 처리를 사용해야 합니다. Amazon Redshift는 자동으로 정렬하고 백그라운드의 테이블에서 VACUUM DELETE 작업을 수행할 수 있습니다.
로드 또는 일련의 증분적 업데이트 후 테이블을 정리하기 위해 전체 데이터베이스나 개별 테이블에 대해 VACUUM 명령을 실행할 수도 있습니다. 테이블에 정렬 키가 있고 삽입 시 정렬하도록 테이블 로드가 최적화되지 않은 경우 배큠을 사용하여 데이터를 재정렬해야 합니다(성능에 중요할 수 있음). 자세한 내용은 Amazon Redshift 설명서의 테이블 Vacuum을 참조하세요.
분석
ANALYZE 작업은 Amazon Redshift 데이터베이스의 테이블에 대한 통계 메타데이터를 업데이트합니다. 통계를 최신 상태로 유지하면 쿼리 플래너가 최적의 계획을 선택할 수 있으므로 쿼리 성능이 향상됩니다. Amazon Redshift는 데이터베이스를 지속적으로 모니터링하고 백그라운드에서 분석 작업을 자동으로 수행합니다. 시스템 성능에 대한 영향을 최소화하기 위해 ANALYZE 작업은 워크로드가 적은 기간에 자동으로 실행됩니다. ANALYZE를 명시적으로 실행하도록 선택한 경우 다음을 수행합니다.
-
쿼리를 실행하기 전에
ANALYZE명령을 실행합니다. -
정기적인 로드 또는 업데이트 사이클이 끝날 때마다 일상적으로 데이터베이스에 대해
ANALYZE명령을 실행합니다. -
새로 생성한 모든 테이블과 많이 변경된 모든 기존 테이블이나 열에 대해
ANALYZE명령을 실행합니다. -
쿼리에서의 사용 및 변경 경향에 따라 테이블과 열의 형식마다 일정을 달리하여
ANALYZE작업을 실행하는 방법을 고려합니다. -
ANALYZE명령을 실행할 때 시간과 클러스터 리소스를 절약하려면PREDICATE COLUMNS절을 사용합니다.
클러스터 구성
클러스터는 데이터의 실제 저장 및 처리를 수행하는 노드 모음입니다. 다음을 달성하려는 경우 Amazon Redshift 클러스터를 올바른 방식으로 설정하는 것이 중요합니다.
-
높은 확장성 및 동시성
-
Amazon Redshift의 효율적인 사용
-
향상된 성능
-
비용 절감
노드 유형
Amazon Redshift 클러스터는 여러 노드 유형(RA3, DC2 및 DS2) 중 하나를 사용할 수 있습니다. 각 노드 유형마다 크기와 제한이 다르기 때문에 상황에 따라 클러스터를 확장하는 데도 좋습니다. 노드 크기는 스토리지 용량, 메모리, CPU, 그리고 클러스터의 각 노드 요금을 결정합니다. 비용 및 성능 최적화는 올바른 노드 유형과 크기를 선택하는 것으로 시작됩니다. 노드 유형에 대한 자세한 내용은 Amazon Redshift 설명서의 Amazon Redshift 클러스터 개요를 참조하세요.
노드 크기, 노드 수 및 조각
컴퓨팅 노드는 다수의 조각으로 분할됩니다. 노드가 많아질수록 프로세서와 조각의 수도 늘어난다는 것을 의미합니다. 그러면 쿼리를 다수의 조각으로 나눠 동시에 실행하기 때문에 쿼리의 처리 속도를 높일 수 있습니다. 그러나 노드가 많을수록 비용도 증가합니다. 즉, 시스템에 적합한 비용과 성능의 균형을 찾아야 합니다. Amazon Redshift 클러스터 아키텍처에 대한 자세한 내용은 Amazon Redshift 설명서의 데이터 웨어하우스 시스템 아키텍처를 참조하세요.
워크로드 관리
Amazon Redshift 워크로드 관리(WLM)를 통해 사용자는 우선순위가 지정된 워크로드 대기열을 유연하게 관리할 수 있으므로 빠른 단기 실행 쿼리가 대기열에서 장기 실행 쿼리 뒤에 모물지 않습니다. 자동 WLM은 기계 학습(ML) 알고리즘을 사용하여 쿼리를 프로파일링하고 적절한 리소스를 사용하여 적절한 대기열에 배치하는 동시에 쿼리 동시성 및 메모리 할당을 관리합니다. WLM에 대한 자세한 내용은 Amazon Redshift 설명서의 워크로드 관리 구현을 참조하세요.
단기 쿼리 가속화
단기 쿼리 가속화(SQA)는 선택한 단기 실행 쿼리를 장기 실행 쿼리보다 우선합니다. SQA 쿼리가 대기열에서 장기 쿼리 뒤에서 대기하지 않도록 SQA는 전용 공간에서 쿼리를 실행합니다. SQA는 단기 실행되고 사용자 정의 대기열에 있는 쿼리에만 우선순위를 부여합니다. SQA를 사용하는 경우 단기 실행 쿼리가 더 빠르게 실행되기 시작하며 사용자가 더 빨리 결과를 확인할 수 있습니다. SQA를 활성화하면 단기 쿼리 실행 전용 WLM 대기열을 축소하거나 제거할 수 있습니다. 또한 장기 실행 쿼리는 WLM 대기열의 슬롯을 두고 경합하지 않아도 됩니다. 즉, 쿼리 슬롯을 더 적게 사용하도록 WLM 대기열을 구성할 수 있습니다. 더 적은 동시성을 사용하면 대부분의 워크로드에 대해 쿼리 처리량이 증가되고 전체 시스템 성능이 향상됩니다. SQA에 대한 자세한 내용은 Amazon Redshift 설명서의 단기 쿼리 가속화 작업을 참조하세요.
SQL 쿼리
데이터베이스 쿼리는 데이터베이스의 데이터에 대한 요청입니다. 요청은 SQL을 사용하여 Amazon Redshift 클러스터에 들어와야 합니다. Amazon Redshift는 Java Database Connectivity(JDBC) 및 Open Database Connectivity(ODBC)를 통해 연결하는 SQL 클라이언트 도구를 지원합니다. JDBC 또는 ODBC 드라이버를 지원하는 SQL 클라이언트 도구라면 대부분 사용할 수 있습니다.
쿼리 구조
쿼리 작성 방식 또한 성능에 큰 영향을 미칩니다. 필요에 따라 필요한 최소의 데이터를 처리하고 반환하는 쿼리를 작성하는 것이 좋습니다. 쿼리를 구성하는 방법에 대한 자세한 내용은 이 가이드의 Amazon Redshift 쿼리 설계 모범 사례 섹션을 참조하세요.
코드 컴파일
Amazon Redshift는 각 쿼리 실행 계획에 최적화된 코드를 생성하고 컴파일합니다. 컴파일 코드는 인터프리터 사용에 따른 오버헤드를 제거하기 때문에 실행 속도가 더욱 빠릅니다. 컴파일된 코드의 성능 이점을 유지하면서 새 쿼리의 지연 시간을 최소화하기 위해 Amazon Redshift는 구성이라는 기술을 사용합니다. 구성은 새로운 쿼리를 즉시 처리하는 동시에 고도로 최적화된 쿼리별 코드를 백그라운드에서 컴파일하는 기존 로직의 간단한 배열을 생성합니다. 이렇게 하면 쿼리 실행의 중요한 경로에서 컴파일이 제거됩니다. 즉, 새 쿼리가 더 빠르게 시작되고 후속 실행과 일치하는 성능을 제공합니다.
또한 Amazon Redshift는 서버리스 컴파일 서비스를 사용하여 Amazon Redshift 클러스터의 컴퓨팅 리소스 이상으로 쿼리 컴파일을 확장합니다. 컴파일된 코드 세그먼트는 클러스터에 로컬로 캐시되고 클러스터 재부팅 후에도 유지되는 사실상 무제한의 원격 캐시에 캐시됩니다. 동일한 쿼리의 후속 실행은 컴파일 단계를 건너뛸 수 있기 때문에 더 빠르게 실행됩니다. Amazon Redshift는 확장 가능한 컴파일 서비스를 사용하여 코드를 병렬로 컴파일하여 일관되게 빠른 성능을 제공합니다.