EXPLAIN ANALYZE의 DPU 이해 - Amazon Aurora DSQL

EXPLAIN ANALYZE의 DPU 이해

Aurora DSQL은 EXPLAIN ANALYZE VERBOSE 계획 출력에 문 수준 분산 처리 장치(DPU) 정보를 제공하므로 개발 중에 쿼리 비용을 심층적으로 파악할 수 있습니다. 이 섹션에서는 DPU가 무엇이고 EXPLAIN ANALYZE VERBOSE 출력에서 해석하는 방법을 설명합니다.

DPU란?

분산 처리 장치(DPU)는 Aurora DSQL에서 수행하는 작업의 정규화된 치수입니다. 다음과 같이 구성됩니다.

  • ComputeDPU - SQL 쿼리를 실행하는 데 소요된 시간

  • ReadDPU - 스토리지에서 데이터를 읽는 데 사용되는 리소스

  • WriteDPU - 스토리지에 데이터를 쓰는 데 사용되는 리소스

  • MultiRegionWriteDPU - 다중 리전 구성에서 피어링된 클러스터에 쓰기를 복제하는 데 사용되는 리소스입니다.

EXPLAIN ANALYZE VERBOSE에서 DPU 사용량

Aurora DSQL은 출력이 끝날 때까지 문 수준 DPU 사용량 추정치를 EXPLAIN ANALYZE VERBOSE를 포함하도록 확장됩니다. 이를 통해 쿼리 비용을 즉시 파악할 수 있으므로 워크로드 비용 동인을 식별하고 쿼리 성능을 조정하며 리소스 사용량을 더 잘 예측할 수 있습니다.

다음 예제에서는 EXPLAIN ANALYZE VERBOSE 출력에 포함된 문 수준 DPU 추정치를 해석하는 방법을 보여줍니다.

예제 1: SELECT 쿼리

EXPLAIN ANALYZE VERBOSE SELECT * FROM test_table;
QUERY PLAN
----------------------------------------------------
Index Only Scan using test_table_pkey on public.test_table  (cost=125100.05..171100.05 rows=1000000 width=36) (actual time=2.973..4.482 rows=120 loops=1)
  Output: id, context
  -> Storage Scan on test_table_pkey (cost=125100.05..171100.05 rows=1000000 width=36) (actual rows=120 loops=1)
      Projections: id, context
      -> B-Tree Scan on test_table_pkey (cost=125100.05..171100.05 rows=1000000 width=36) (actual rows=120 loops=1)
Query Identifier: qymgw1m77maoe
Planning Time: 11.415 ms
Execution Time: 4.528 ms
Statement DPU Estimate:
  Compute: 0.01607 DPU
  Read: 0.04312 DPU
  Write: 0.00000 DPU
  Total: 0.05919 DPU

이 예제에서 SELECT 문은 인덱스 전용 스캔을 수행하므로 대부분의 비용은 스토리지에서 검색된 데이터와 결과를 처리하고 반환하는 데 사용되는 컴퓨팅 리소스를 반영하는 컴퓨팅 DPU(0.01607)를 나타내는 읽기 DPU(0.04312)에서 발생합니다. 쿼리는 데이터를 수정하지 않으므로 쓰기 DPU가 없습니다. 총 DPU(0.05919)는 컴퓨팅 + 읽기 + 쓰기의 합계입니다.

예제 2: 쿼리 삽입

EXPLAIN ANALYZE VERBOSE INSERT INTO test_table VALUES (1, 'name1'), (2, 'name2'), (3, 'name3');
QUERY PLAN
----------------------------------------------------
Insert on public.test_table  (cost=0.00..0.04 rows=0 width=0) (actual time=0.055..0.056 rows=0 loops=1)
  ->  Values Scan on "*VALUES*"  (cost=0.00..0.04 rows=3 width=122) (actual time=0.003..0.008 rows=3 loops=1)
        Output: "*VALUES*".column1, "*VALUES*".column2
Query Identifier: jtkjkexhjotbo
Planning Time: 0.068 ms
Execution Time: 0.543 ms
Statement DPU Estimate:
  Compute: 0.01550 DPU
  Read: 0.00307 DPU (Transaction minimum: 0.00375)
  Write: 0.01875 DPU (Transaction minimum: 0.05000)
  Total: 0.03732 DPU

이 문은 주로 쓰기를 수행하므로 대부분의 비용이 쓰기 DPU와 연결됩니다. 컴퓨팅 DPU(0.01550)는 값을 처리하고 삽입하기 위해 수행된 작업을 나타냅니다. 읽기 DPU(0.00307)는 마이너 시스템 읽기(카탈로그 조회 또는 인덱스 검사용)를 반영합니다.

읽기 및 쓰기 DPU 옆에 표시된 트랜잭션 최소값을 확인합니다. 이는 작업에 읽기 또는 쓰기가 포함된 경우에만 적용되는 기준 트랜잭션당 비용을 나타냅니다. 모든 트랜잭션에 0.00375 읽기 DPU 또는 0.05 쓰기 DPU 요금이 자동으로 부과된다는 의미는 아닙니다. 대신 이러한 최소값은 비용 집계 중에 트랜잭션 수준에서 적용되며 해당 트랜잭션 내에서 읽기 또는 쓰기가 발생하는 경우에만 적용됩니다. 이러한 범위 차이로 인해 EXPLAIN ANALYZE VERBOSE의 문 수준 추정치는 CloudWatch 또는 결제 데이터에 보고된 트랜잭션 수준 지표와 정확히 일치하지 않을 수 있습니다.

최적화를 위한 DPU 정보 사용

문별 DPU 추정치는 실행 시간 이상으로 쿼리를 최적화할 수 있는 강력한 방법을 제공합니다. 일반적인 사용 사례는 다음과 같습니다.

  • 비용 인식: 쿼리가 다른 쿼리에 비해 얼마나 많은지 이해합니다.

  • 스키마 최적화: 인덱스 또는 스키마 변경이 성능 및 리소스 효율성에 미치는 영향을 비교합니다.

  • 예산 계획: 관찰된 DPU 사용량을 기준으로 워크로드 비용을 추정합니다.

  • 쿼리 비교: 상대적 DPU 사용량을 기준으로 대체 쿼리 접근 방식을 평가합니다.

DPU 정보 해석

EXPLAIN ANALYZE VERBOSE에서 DPU 데이터를 사용할 때는 다음 모범 사례를 염두에 두세요.

  • 방향에 따라 사용: 보고된 DPU를 CloudWatch 지표 또는 결제 데이터와 정확히 일치하지 않고 쿼리의 상대 비용을 이해하는 방법으로 취급합니다. EXPLAIN ANALYZE VERBOSE는 문 수준 비용을 보고하는 반면 CloudWatch는 트랜잭션 수준 활동을 집계하기 때문에 차이가 예상됩니다. CloudWatch에는 EXPLAIN ANALYZE VERBOSE에서 의도적으로 제외되는 백그라운드 작업(예: ANALYZE 또는 압축) 및 트랜잭션 오버헤드(BEGIN/COMMIT)도 포함됩니다.

  • 실행 간 DPU 변동성은 분산 시스템에서 정상이며 오류를 나타내지 않습니다. 캐싱, 실행 계획 변경, 동시성 또는 데이터 배포의 전환과 같은 요인으로 인해 동일한 쿼리가 한 실행에서 다음 실행으로 서로 다른 리소스를 소비할 수 있습니다.

  • 소규모 작업 배치: 워크로드에서 작은 문이 많이 발생하는 경우 대규모 작업(10MB를 초과하지 않음)으로 일괄 처리하는 것이 좋습니다. 이렇게 하면 반올림 오버헤드가 줄어들고 더 의미 있는 비용 추정치가 생성됩니다.

  • 결제가 아닌 튜닝에 사용: EXPLAIN ANALYZE VERBOSE의 DPU 데이터는 비용 인식, 쿼리 튜닝 및 최적화를 위해 설계되었습니다. 결제 등급 지표가 아닙니다. 신뢰할 수 있는 비용 및 사용량 데이터는 항상 CloudWatch 지표 또는 월별 결제 보고서에 의존하세요.