서비스 사용 최적화 - Amazon Athena

서비스 사용 최적화

서비스 수준 고려 사항에는 계정당 실행하는 워크로드 수, Athena뿐만 아니라 전체 서비스에 대한 서비스 할당량, '리소스 부족' 오류를 줄이는 방법에 대한 고려 등이 포함됩니다.

동일한 계정 내에서 여러 워크로드 운영

Athena는 할당량을 사용하여 계정 수준에서 쿼리 동시성 및 API 요청 속도를 제한합니다. 이러한 할당량을 초과하면 실행 중 또는 제출 시 쿼리가 실패할 수 있습니다. 이러한 할당량에 대한 자세한 내용은 Service Quotas 섹션을 참조하세요.

동일한 AWS 계정 내에서 여러 워크로드를 운영하는 경우 워크로드는 동일한 계정 수준 할당량에 대해 경합합니다. 예를 들어 한 워크로드에서 예기치 않은 쿼리 버스트가 발생하는 경우 쿼리 제출 스로틀링이 발생하거나 대기열 시간이 증가할 수 있습니다.

CloudWatch를 사용하여 그래프 및 대시보드를 통해 서비스 사용량을 모니터링하는 것이 좋습니다. 또한 사용량이 동시 쿼리 서비스 할당량에 근접하면 알려주는 CloudWatch 경보를 구성하여 할당량 한도에 도달하기 전에 조치를 취할 수 있습니다. 자세한 내용은 CloudWatch를 사용하여 Athena 사용량 지표 모니터링 섹션을 참조하세요.

계정 내에서 쿼리 동시성을 제어하고 워크로드를 격리하려면 용량 예약을 사용합니다. 용량 예약은 단일 계정 내에서 전용 쿼리 처리 용량을 제공합니다. 용량은 데이터 처리 단위(DPU)로 측정되며 쿼리 동시성을 증가 또는 감소하기 위해 추가 또는 제거할 수 있습니다. 용량 예약을 사용하면 하나 이상의 작업 그룹에 용량을 할당하여 계정 내의 워크로드를 서로 격리할 수 있습니다. 자세한 내용은 쿼리 처리 용량 관리 섹션을 참조하세요.

워크로드를 다른 AWS 계정으로 분리하는 것은 조직의 목적(예: 개발 환경을 프로덕션 환경에서 격리)에 유용할 수 있지만, 이 접근 방식은 쿼리 동시성을 증가하는 확장 가능한 방법을 제공하지 않습니다. 대신 용량 예약을 사용하여 단일 계정 내에서 쿼리 처리 요구 사항을 관리하고 확장할 수 있습니다.

다른 서비스의 할당량 고려

Athena에서 쿼리를 실행할 때 할당량을 적용하는 다른 서비스를 호출할 수 있습니다. 쿼리 실행 중에 Athena는 AWS Glue Data Catalog, Amazon S3, 기타 AWS 서비스(예: IAM 및 AWS KMS)에 대한 API 호출을 수행할 수 있습니다. 페더레이션된 쿼리를 사용하는 경우 Athena는 AWS Lambda도 직접적으로 호출합니다. 이러한 모든 서비스에는 초과할 수 있는 자체 한도 및 할당량이 있습니다. 쿼리 실행 시 이러한 서비스에서 오류가 발생하면 쿼리에 실패하고 소스 서비스에서도 오류가 발생합니다. 복구 가능한 오류는 재시도되지만 문제가 제때 해결되지 않으면 쿼리에 실패할 수 있습니다. 오류 메시지를 자세히 읽고 Athena에서 보낸 것인지, 다른 서비스에서 보낸 것인지 확인합니다. 이 성능 조정 섹션에서는 관련 오류 중 일부를 다룹니다.

Amazon S3 서비스 할당량으로 인한 오류 해결에 대한 자세한 내용은 이 문서에서 나중에 나오는 너무 많은 수의 파일 방지 섹션을 참조하세요. Amazon S3 성능 최적화에 대한 자세한 내용은 Amazon S3 사용 설명서모범 사례 설계 패턴: Amazon S3 성능 최적화를 참조하세요.

'리소스 부족' 오류 줄이기

Athena는 분산 쿼리 엔진에서 쿼리를 실행합니다. 쿼리를 제출하면 Athena 엔진 쿼리 플래너에서 쿼리를 실행하는 데 필요한 컴퓨팅 용량을 추정하고 적절히 컴퓨팅 노드 클러스터를 준비합니다. DDL 쿼리와 같은 일부 쿼리는 하나의 노드에서만 실행됩니다. 대규모 데이터 세트에 대한 복잡한 쿼리는 훨씬 더 큰 클러스터에서 실행됩니다. 노드는 동일한 메모리, CPU 및 디스크 구성을 사용하여 균일합니다. Athena는 보다 까다로운 쿼리를 처리하기 위해 스케일 업이 아닌, 스케일 아웃으로 확장합니다.

쿼리 요구량이 쿼리를 실행하는 클러스터에서 사용할 수 있는 리소스를 초과하는 경우가 있습니다. 이 경우 쿼리에 실패하고 Query exhausted resources at this scale factor 오류가 발생합니다.

일반적으로 가장 많이 소진되는 리소스는 메모리이지만, 디스크 공간이 소진되는 경우도 드물게 있습니다. 메모리 오류는 엔진에서 조인 또는 창 함수를 수행할 때 흔히 발생하지만 개별 개수와 집계에서 발생할 수도 있습니다.

일단 'out of resource' 오류로 쿼리에 실패했더라도 다시 실행했을 때 성공할 수도 있습니다. 쿼리 실행은 결정적이지 않습니다. 데이터를 로드하는 데 걸리는 시간, 중간 데이터 세트가 노드에 분산되는 방식 등의 요인으로 인해 리소스 사용량이 달라질 수 있습니다. 예를 들어 두 테이블을 조인하고 조인 조건의 값 분포에서 편차가 큰 쿼리를 가정합니다. 이러한 쿼리는 대부분의 경우 성공할 수 있지만, 가장 일반적인 값이 동일한 노드에서 처리되면 실패합니다.

쿼리가 사용 가능한 리소스를 초과하지 않도록 하려면 이 문서에 언급된 성능 튜닝 팁을 사용합니다. 특히 사용 가능한 리소스를 소진하는 쿼리를 최적화하는 방법에 대한 팁은 조인 최적화, 창 함수의 범위를 축소 또는 제거근사치를 사용하여 쿼리 최적화 섹션을 참조하세요.