Amazon Redshift Spectrum 쿼리 성능 개선 - Amazon Redshift

Amazon Redshift Spectrum 쿼리 성능 개선

쿼리 계획을 보고 Amazon Redshift Spectrum 계층으로 어떤 단계들이 푸시되었는지 확인합니다.

Redshift Spectrum 쿼리와 관련된 단계들은 다음과 같습니다.

  • S3 Seq Scan

  • S3 HashAggregate

  • S3 Query Scan

  • Seq Scan PartitionInfo

  • Partition Loop

다음 예는 외부 테이블을 로컬 테이블에 조인하는 쿼리의 쿼리 계획을 보여 줍니다. Amazon S3에 있는 데이터에 대해 S3 Seq Scan 단계와 S3 HashAggregate 단계가 실행되었음에 유의합니다.

explain select top 10 spectrum.sales.eventid, sum(spectrum.sales.pricepaid) from spectrum.sales, event where spectrum.sales.eventid = event.eventid and spectrum.sales.pricepaid > 30 group by spectrum.sales.eventid order by 2 desc;
QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan spectrum.sales location:"s3://redshift-downloads/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)

쿼리 계획에서 다음 요소들에 유의하십시오.

  • S3 Seq Scan 노드는 필터 pricepaid > 30.00가 Redshift Spectrum 계층에서 처리되었음을 보여 줍니다.

    XN S3 Query Scan 노드 아래의 필터 노드는 Redshift Spectrum 계층에서 반환되는 데이터에 기반한 Amazon Redshift에서의 조건자 처리를 나타냅니다.

  • S3 HashAggregate 노드는 절(group by spectrum.sales.eventid)에 의한 Redshift Spectrum 계층에서의 집계를 나타냅니다.

Redshift Spectrum 성능을 개선할 수 있는 방법은 다음과 같습니다.

  • Apache Parquet 형식의 데이터 파일을 사용합니다. Parquet은 데이터를 컬럼 형식으로 저장하므로 Redshift Spectrum이 스캔에서 불필요한 열을 제거할 수 있습니다. 데이터가 텍스트 파일 형식인 경우, Redshift Spectrum은 전체 파일을 스캔해야 합니다.

  • 병렬 처리에 최적화되도록 여러 파일을 사용합니다. 파일 크기를 64MB 이상으로 유지하십시오. 파일 크기를 비슷하게 유지해 데이터 크기 스큐를 피하십시오. Apache Parquet 파일 및 구성 권장 사항에 대한 자세한 내용은 Apache Parquet 설명서파일 형식: 구성을 참조하세요.

  • 쿼리에서 사용하는 열을 최소화하십시오.

  • 큰 팩트 테이블은 Amazon S3에 넣고 자주 사용하는 작은 차원 테이블은 로컬 Amazon Redshift 데이터베이스에 둡니다.

  • TABLE PROPERTIES numRows 속성을 설정하여 외부 테이블 통계를 업데이트합니다. CREATE EXTERNAL TABLE 또는 ALTER TABLE을 사용하여 테이블의 행 수를 반영하도록 TABLE PROPERTIES numRows 파라미터를 설정합니다. Amazon Redshift는 쿼리 옵티마이저가 쿼리 계획을 생성하는 데 사용하는 테이블 통계를 생성하기 위해 외부 테이블을 분석하지 않습니다. 테이블 통계가 외부 테이블에 대해 설정되지 않은 경우 Amazon Redshift는 쿼리 실행 계획을 실행합니다. Amazon Redshift는 외부 테이블이 더 큰 테이블이고 로컬 테이블이 더 작은 테이블이라는 가정을 기반으로 이 계획을 생성합니다.

  • Amazon Redshift 쿼리 플래너는 가능하면 항상 조건자 및 집계를 Redshift Spectrum 쿼리 계층으로 푸시합니다. Amazon S3에서 대량의 데이터가 반환되면 클러스터의 리소스에 의해 처리가 제한됩니다. Redshift Spectrum은 대량의 요청을 처리하기 위해 자동으로 조정됩니다. 따라서 처리를 Redshift Spectrum 계층으로 푸시할 수 있을 때마다 전반적인 성능이 향상됩니다.

  • Redshift Spectrum 계층으로 푸시할 수 있는 필터와 집계를 사용하도록 쿼리를 작성하십시오.

    다음은 Redshift Spectrum 계층으로 푸시할 수 있는 몇 가지 연산의 예입니다.

    • GROUP BY 절

    • 비교 조건 및 패턴 일치 조건(예: LIKE).

    • COUNT, SUM, AVG, MIN, MAX 등 집계 함수.

    • 문자열 함수.

    Redshift Spectrum 계층으로 푸시할 수 없는 연산으로는 DISTINCT와 ORDER BY가 있습니다.

  • 파티션을 사용하여 스캔되는 데이터를 제한하십시오. 가장 일반적인 쿼리 조건자를 기준으로 데이터를 파티셔닝한 다음 파티션 열을 기준으로 파티션을 정리합니다. 자세한 내용은 Redshift Spectrum 외부 테이블 파티셔닝 단원을 참조하십시오.

    SVL_S3PARTITION을 쿼리하여 총 파티션과 적격 파티션을 확인합니다.

  • AWS Glue의 통계 생성기를 사용하여 AWS Glue Data Catalog 테이블의 열 수준 통계를 계산합니다. AWS Glue가 데이터 카탈로그의 테이블에 대한 통계를 생성하고 나면 Amazon Redshift Spectrum은 자동으로 해당 통계를 사용하여 쿼리 계획을 최적화합니다. AWS Glue를 사용하여 열 수준 통계를 계산하는 방법에 대한 자세한 내용은 AWS Glue 개발자 안내서의 열 통계 작업을 참조하세요.