서비스 사용 최적화 - Amazon Athena

서비스 사용 최적화

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

계정당 하나의 워크로드를 실행하여 서비스 할당량 제한을 방지합니다.

Athena는 쿼리 실행 시간, 계정의 동시 쿼리 수, API 요청 속도와 같은 지표에 대한 할당량을 적용합니다. 이러한 할당량에 대한 자세한 내용은 Service Quotas 섹션을 참조하세요. 할당량을 초과하면 쿼리를 제출할 때나 쿼리 실행 중에 쿼리에 실패합니다.

이 페이지에 나온 많은 성능 최적화 팁은 쿼리 실행 시간을 줄이는 데 도움이 될 수 있습니다. 최적화는 용량을 확보하여 동시 할당량 내에서 더 많은 쿼리를 실행하고 쿼리의 실행 시간이 길어질 때 쿼리가 취소되지 않도록 방지할 수 있습니다.

동시 쿼리 수 및 API 요청 수에 대한 할당량은 AWS 계정 및 AWS 리전당 계산됩니다. 워크로드가 동일한 할당량을 두고 경쟁하지 않도록 하려면 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' 오류로 쿼리에 실패했더라도 다시 실행했을 때 성공할 수도 있습니다. 쿼리 실행은 결정적이지 않습니다. 데이터를 로드하는 데 걸리는 시간, 중간 데이터 세트가 노드에 분산되는 방식 등의 요인으로 인해 리소스 사용량이 달라질 수 있습니다. 예를 들어 두 테이블을 조인하고 조인 조건의 값 분포에서 편차가 큰 쿼리를 가정합니다. 이러한 쿼리는 대부분의 경우 성공할 수 있지만, 가장 일반적인 값이 동일한 노드에서 처리되면 실패합니다.

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