기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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의 vacuuming 프로세스는 Amazon Redshift 클러스터의 상태 및 유지 관리에 필수적입니다. 또한 쿼리 성능에도 영향을 미칩니다. 는 이전 데이터를 모두 삭제하고 업데이트하지만 실제로 제거하지는 않기 때문에 이전 UPDATE
및 DELETE
작업에서 삭제하도록 표시된 테이블 행이 차지한 디스크 공간을 회수하려면 vacuuming을 사용해야 합니다. Amazon Redshift는 백그라운드의 테이블에서 VACUUM DELETE
작업을 자동으로 정렬하고 수행할 수 있습니다.
로드 또는 일련의 증분적 업데이트 후 테이블을 정리하기 위해 전체 데이터베이스나 개별 테이블에 대해 VACUUM
명령을 실행할 수도 있습니다. 테이블에 정렬 키가 있고 테이블 로드가 삽입된 정렬에 최적화되지 않은 경우 vacuum을 사용하여 데이터를 사용해야 합니다(성능에 중요할 수 있음). 자세한 내용은 Amazon Redshift 설명서의 테이블 정리를 참조하세요.
분석
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는 확장 가능한 컴파일 서비스를 사용하여 코드를 병렬로 컴파일하여 일관되게 빠른 성능을 제공할 수 있습니다. 워크로드 속도 향상의 규모는 쿼리의 복잡성과 동시성에 따라 다릅니다.