[AWS] Redshift란?

01. Amazon Redshift ?

Amazon Redshift ?

  • AWS 클라우드에서 완벽하게 관리되는 페타바이트급 데이터 웨어하우스 서비스입니다.

  • 데이터 웨어하우스는 노드라는 컴퓨팅 리소스의 모음으로, 노드는 클러스터라는 그룹을 구성합니다.

 Amazon Redshift 개념
  • 클러스터 – Amazon Redshift 데이터 웨어하우스의 핵심 인프라 구성 요소는 클러스터입니다.

    1. 클러스터는 하나 이상의 컴퓨팅 노드로 구성됩니다. 컴퓨팅 노드는 컴파일된 코드를 실행합니다.

    2. 클러스터에 두 개 이상의 컴퓨팅 노드가 제공된 경우 추가 리더 노드가 컴퓨팅 노드를 조정합니다.

    3. 리더 노드는 비즈니스 인텔리전스 도구 및 쿼리 편집기와 같은 애플리케이션과의 외부 통신을 처리합니다.

  • 클라이언트 애플리케이션은 리더 노드와만 직접 상호작용합니다.

    1. 데이터베이스 – 클러스터에는 하나 이상의 데이터베이스가 포함되어 있습니다.

    2. 사용자 데이터는 컴퓨팅 노드에 있는 하나 이상의 데이터베이스에 저장됩니다.

    3. SQL 클라이언트는 리드 노드와 통신하고, 리더 노드는 이어서 컴퓨팅 노드와 쿼리 실행을 조정합니다.

 

Redshift 일반적인 데이터 처리 흐름

  • Datashare를 사용하여 Redshift 클러스터에서 읽기용으로 라이브 데이터를 비교적 안전하고 쉽게 공유합니다.

  • Redshift Spectrum 을 사용하여 데이터를 Redshift 테이블에 로드 하지 않고도 S3 파일에서 데이터를 쿼리합니다.

  • 연합 쿼리를 사용하여 RDS 및 Aurora 또는 S3와 같은 관계형 데이터베이스의 데이터를 Redshift DB 데이터와 Join 합니다.

  • SageMaker Autopilot과 함께 작동하여 최상의 모델을 자동으로 얻고 Redshift에서 예측 함수를 사용할 수 있도록 합니다.

데이터 웨어하우스 시스템 아키텍처



리더 노드

  • 클라이언트 프로그램과 일어나는 통신을 비롯해 컴퓨팅 노드와 일어나는 모든 통신을 관리합니다.

  • 구문을 분석하여 데이터베이스 작업, 특히 복잡한 쿼리의 결과를 얻는데 필요한 단계를 연이어 실행하기 위한 실행 계획을 작성합니다.

  • 작성된 실행계획에 따라 코드를 컴파일하여 컴퓨팅 노드로 배포한 후 데이터 구간을 각 컴퓨팅 노드로 할당합니다.

컴퓨팅 노드

  • 리더 노드는 실행 계획을 구성하는 개별 요소마다 코드를 컴파일하여 각 컴퓨팅 노드에 할당합니다.

  • 그러면 컴퓨팅 노드가 컴파일 코드를 실행한 후 최종 집계를 위해 중간 결과를 리더 노드에 다시 보냅니다.

  • 각 컴퓨팅 노드마다 전용 CPU와 메모리, 그리고 내장 디스크 스토리지가 따로 있으며, 이는 노드 유형에 따라 결정됩니다.

노드 조각

  • 컴퓨팅 노드는 다수의 조각으로 분할됩니다.

  • 분할된 조각은 다시 각각 노드의 메모리 및 디스크 공간으로 할당되고, 여기에서 노드에 할당되는 워크로드를 처리합니다.

  • 리더 노드는 조각에 대한 분산을 관리하면서 쿼리 워크로드 또는 기타 데이터베이스 작업 워크로드를 각 조각으로 할당합니다.

  • 각 조각은 병렬 방식으로 실행되어 작업을 완료합니다.

대용량 병렬 처리

  • 대용량 병렬 처리(MPP)는 아무리 복잡한 쿼리라고 해도 빠른 속도로 실행하여 대용량 데이터를 처리할 수 있습니다.

  • 다수의 컴퓨팅 노드가 각 노드의 코어마다 전체 데이터를 분할하여 쿼리 실행하면서 최종 집계에 이를 때까지 모든 쿼리를 처리합니다.

열 기반 데이터 스토리지

  • 데이터베이스 테이블 정보를 열 기반 방식으로 저장하기 때문에 디스크 I/O 호출 및 로드해야 하는 데이터 크기가 감소합니다.

  • 열이 적절하게 정렬되면 쿼리 프로세스가 대용량의 데이터 블록 하위 집합을 빠르게 필터링할 수 있습니다.

쿼리 옵티마이저

  • 쿼리 실행 엔진은 MPP를 인식하고 열 기반 데이터 스토리를 활용하는 쿼리 옵티마이저를 통합합니다.

  • 다중 데이블 조인, 하위 쿼리 및 집계를 포함하는 복잡한 분석 쿼리를 처리하기위한 중요한 향상 및 확장을 구현합니다.

결과 캐싱

  • 쿼리 실행 시간을 줄이고 시스템 성능을 항상시키기 위해 특정 형식의 쿼리 결과를 리드 노드의 메모리에 캐시합니다.

  • 사용자가 쿼리하면, 결과 캐시에 유효한 항목 검색하여 찾을시 캐시된 결과를 사용하고 쿼리는 실행하지 않습니다.

노드 유형 정보

  • vCPU는 각 노드의 가상 CPU 수입니다.

  • RAM은 각 노드의 메모리 크기(GiB)입니다.

  • 노드당 기본 조각은 클러스터를 생성하거나 클래식 크기 조정으로 크기를 조정할 때 컴퓨팅 노드가 분할되는 조각 수입니다.

  • 탄력적 크기 조정을 사용하여 클러스터 크기를 조정할 경우 노드당 조각 수가 변경될 수 있습니다.

  • 탄력적 크기 조정 후에도 클러스터의 모든 컴퓨팅 노드에 있는 총 조각 수는 동일하게 유지됩니다.

 

02. TABLE DISTSTYLE


데이터 분산 목적

  • 데이터를 테이블에 로드할 때는 테이블 생성 시 선택한 배포 스타일에 따라 테이블의 행을 컴퓨팅 노드 및 조각으로 분산시킵니다.

  • 워크로드를 클러스터 노드에 균일하게 분산시킵니다. 만약 불균일 분산시 해당 노드가 더 많은 일을 해 쿼리성능을 떨어 뜨립니다.

  • 쿼리 실행시 데이터 이동을 최소화 하려면 조인 또는 집계에 참여하는 행이 같은 노드에 있어야 데이터 재분산 시킬 필요가 없습니다.

  • 테이블 마다 최적의 분산 스타일을 선책해야만 데이터 분산 밸런스를 맞춰 전체적인 시스템 성능을 크게 높일 수 있습니다.

데이터 재분산

  • 테이블에 데이터를 로드하면 테이블의 배포 스타일에 따라 테이블 행을 각 노드 조각으로 분산시킵니다.

  • 옵티마이저가 쿼리 계획에 따라 최적의 쿼리 실행을 위한 데이터 블록 위치를 결정합니다.

  • 쿼리가 실행되는 동안 데이터가 물리적으로 이동되거나 재배포됩니다.

  • 재분산에는 조인을 위해 특정 행을 노드로 전송하거나, 혹은 전체 테이블을 모든 노드로 브로드캐스팅하는 작업이 포함될 수 있습니다.

데이터 재분산 종류

  1.  ALL

  2. EVEN

  3. KEY

AUTO 분산

  • 테이블 데이터의 크기를 기반으로 최적의 배포 스타일을 할당합니다.

  • 예로 처음에 작은 테이블에 ALL 분산을 할당한 다음 테이블이 더 커지면 EVEN 배포로 변경합니다.

EVEN 분산

  • 리드 노드는 특정 열 값에 상관없이 행을 라운드 로빈 방식으로 조각에 분산시킵니다.

  • EVEN 배포는 테이블이 조인에 참여하지 않는 경우 적합하며, KEY 배포와 ALL 배포 사이에 명확한 선택이 없는 경우도 적합합니다.



KEY 분산

  • 행이 열 1개의 값에 따라 분산됩니다. 리더 노드는 일치하는 값을 동일한 노드 조각에 할당합니다.

  • 조인 키를 기준으로 분산시키면 리더 조인 열의 값에 따라 행을 조각에 공동 배치하기 때문에  열이 일치 하는 물리적으로 함께 저장됩니다.

 

ALL 분산

  • 전체 테이블의 복사본이 모든 노드로 분산됩니다.

  • EVEN 분산이나 KEY 분산은 테이블 행의 일부를 각 노드에 할당하는 반면 ALL 분산은 테이블이 참여하는 조인마다 모든 행을 배치합니다.

  • ALL 분산은 필요한 스토리지를 클러스터 노드 수와 곱하기 때문에 다수의 데이터를 테이블에 삽입, 수정 시 더 많은 시간이 걸립니다.

 
 

03. SORT KEY


SORT KEY?

  • 열 기반 데이터를 1MB 디스크 블록에 저장합니다.

  • 각 블록의 최소 값과 최대 값은 메타데이터로 저장됩니다.

  • 쿼리가 범위 제한 조건절을 사용하는 경우에는 쿼리 프로세서가 테이블 스캔 도중 최소/최대 값을 사용하여 블록을 건너 뛸 수 있습니다.

 
COMPOUND SORT KEY (복합 정렬 키)
  • 복합 키는 정렬 키를 정의할 때 나열되는 모든 열로 구성되며, 나열 순서를 다릅니다.

  • 복합 정렬 키는 조인 작업과 GROUP BY 및 ORDER BY 작업, 그리고 PARTITION BY를 사용하는 원도우 함수의 속도를 높이는 효과가 있음.

  • 이미 데이터가 로드되어 정렬까지 마친 테이블에 행을 추가하면 미정렬 영역이 증가하여 성능에 커다란 영향을 미칩니다.


 

INTERLEAVEL SORT KEY (인터리브 정렬 키) 

  • 각 열, 즉 열의 하위 집합에 똑같은 가중치를 부여합니다.

  • 다수의 쿼리가 다른 열을 필터로 사용하는 경우에는 인터리브 정렬 키를 통해 쿼리의 성능을 높일 수 있는 경우가 종종 있습니다.

  • 인터리브 정렬키를 사용하여 향상되는 성능 이점과 로드 및 정리 시간이 늘어나는 문제를 서로 비교하여 검토해야 합니다.


 

04. SCAN


TABLE DISTSTYLE ALL

  • DISTSTYLE ALL TABLE 조회

  • 4개 Node에 모든 데이터 저장되어 있고, 그중 특정 1 Node만 읽는다.

 

TABLE DISTSTYLE EVEN

  • DISTSTYLE EVEN TABLE 조회

  • 4개 Node에 ¼식 데이터 저장되어 있어 모든 Node 읽어 처리한다.

 
 

TABLE DISTSTYLE KEY

  • DISTSTYLE KEY TABLE 조회

  • 4개 Node에 KEY 별로 데이터 저장되어 있어 모든 Node 읽어 처리한다.

 
 

COMPOUND SORT KEY

  • ZONE MAP 에서 BLOCK 당 최소, 최대 값 정보 저장 해당 정보 이용하여 필요한 BLOCK만 읽어 효율성이 높아진다.

  • DISTSTYLE ALL 이라도 전체를 다 읽지 않아 I/O 효율이 높으나, 입력 수정 시 정렬이 필요하여 쓰기 효율은 떨어진다.  

 

INTERLEAVED SORT KEY

  • WHERE 절에서 1개 이상의 정렬 키를 기준으로 필터링하여 선택의 폭이 매우 제한적인 쿼리를 실행할 때 효과 적입니다.

  • 테이블이 슬라이스당 여러 개의 1MB 블록을 요구할 만큼 충분히 클때 가장 효과적입니다.


05. JOIN


DS_DIST_ALL_NONE

  • DISTSTYLE ALL TABLE이 Inner Join 으로 검색시 나타난다.

  • 4개 Node에 모든 값이 있는 Table Join으로 네트워크 부담 없이 각노드에서 Join후 Leader Node에 결과값 전달한다.

DS_DIST_NONE

  • DISTSTYLE KEY TABLE이 각각 같은 KEY로 Join시 나타난다.

  • 4개 Node에 KEY값이 같은 Table이 한 Node에 분배되어 있어 각각 Node에만 Join 후 Leader Node에 전달한다.

DS_DIST_OUTER

  • DISTSTYLE KEY 타입, EVEN 타입 Table Join 나타난다.

  • 4개 Node에 Outer로 선정된 EVEN 타입 Table이 모드 노드에 재분배한 후 Join하여 결과를 Leader Node에 전달한다.

 

DS_DIST_BOTH

  • DISTSTYLE EVEN 타입 2 Table Join 나타난다.  

  • 4개 Node에 각각 EVEN Table로 각각 노드에 모든 Table을 재분배한 후 Join하여 결과를 Leader Node에 전달한다.

  • 가장 비효율이 큰 작업으로 튜닝에 대상이 된다.

 
 

06. 성능


인스턴스 & 노드별 SQL 성능

  • TEST 결과는 첫번째 쿼리 결과를 버리고 두번째 결과를 가지고 측정하였습니다.

  • ms단위 입니다.

인스턴스 & 노드별 Join 방법 및 비용

  • 인스턴스&노드 수 차이로 비용은 크게 차이 나지 않습니다.

  • Join 방법 (재분배)에 가장 큰 영향을 받습니다.

 

07. 성능 TEST 상세


Table DML

  • 각 Table에 1억건 INSERT

Table Count

  • Table 건수 확인

 

SQL & EXPLIN

  • COUNT

  • ALL & ALL

  • DS_DIST_ALL_NONE

SQL & EXPLIN

  • COUNT

  • EVEN & EVEN

  • DS_DIST_BOTH

 

SQL & EXPLIN

  • COUNT

  • KEY & KEY

  • DS_DIST_NONE

 

SQL & EXPLIN

  • GROUP

  • ALL & ALL

  • DS_DIST_ALL_NONE

 

SQL & EXPLIN

  • GROUP

  • EVEN & EVEN

  • DS_DIST_BOTH

SQL & EXPLIN

  • GROUP

  • KEY & KEY

  • DS_DIST_NONE

 

SQL & EXPLIN

  • GROUP

  • ALL & EVEN

  • DS_DIST_ALL_NONE

SQL & EXPLIN

  • GROUP

  • ALL & KEY

  • DS_DIST_ALL_NONE

 

SQL & EXPLIN

  • GROUP

  • EVEN & KEY

  • DS_DIST_OUTER


08. 주의 사항 


지원되지 않는 PostgreSQL 주요 기능

  • Index

  • Constraints

  • Sequences

  • Triggers

  • Partition

  • 상세 정보 https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/c_unsupported-postgresql-features.html

지원되지 않는 PostgreSQL 주요 Data Type

  • JSON

  • BIT, BIT VARYING

  • Arrays

  • XML

  • 상세 정보 https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/c_unsupported-postgresql-datatypes.html

“[AWS] Redshift란?”의 2개의 댓글

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다