Amazon Athena의 쿼리를 실행하는 데 시간이 오래 걸리는 이유는 무엇입니까?

최종 업데이트 날짜: 2021년 5월 14일

내 Amazon Athena 쿼리를 실행하는 데 시간이 오래 걸립니다. 쿼리 대기열에 있는 시간이 깁니다. 쿼리 처리 속도를 높이려면 어떻게 해야 합니까?

간략한 설명

Athena는 서버리스 대화식 쿼리 서비스입니다. Athena에 쿼리를 제출하면 쿼리가 백엔드의 리소스 풀에서 실행됩니다. 이러한 리소스는 해당 리전의 모든 사용자가 공유합니다. 쿼리가 실행되기 전에 일시적으로 대기열에 있을 수 있습니다. 쿼리는 일반적으로 대기 시간이 길거나 엔진 처리 시간이 길기 때문에 실행하는 데 시간이 오래 걸립니다.

해결 방법

쿼리 ID에 대한 GetQueryExecution API를 호출합니다. 이 API는 쿼리의 단일 처리에 대한 정보를 반환합니다. 이 정보에는 다음과 같은 유용한 세부 정보가 포함됩니다.

  • 대기열에 있는 쿼리에 소요된 시간(QueryQueueTimeInMillis)
  • 계획에서 쿼리에 소요된 시간(QueryPlanningTimeInMillis)
  • 엔진 처리 시간(EngineExecutionTimeInMillis)

이 정보는 API 응답의 Statistics 파라미터에서 볼 수 있습니다.

대기열에 있는 시간이 길어짐

백엔드의 리소스 사용량이 많아 쿼리가 대기열에 있는 시간이 더 길어질 수 있습니다. Athena에서 대기열에 있는 시간은 리소스 할당에 따라 달라집니다. Athena에 쿼리를 제출한 후 다음을 기반으로 리소스를 할당하여 쿼리가 처리됩니다.

  • 전체 서비스 로드
  • 수신 요청 수

쿼리가 대기열에 있는 시간이 더 길면 다음을 수행하여 쿼리 성능을 개선합니다.

  1. 일정 기간 동안 쿼리를 배포하는 것이 좋습니다. 쿼리를 배치로 실행하는 경우 한 번에 큰 배치를 제출하는 대신 작은 배치를 더 자주 제출합니다. 이렇게 하면 쿼리가 QUEUED 상태로 유지되는 시간이 줄어들어 전체 쿼리 처리 시간을 단축할 수 있습니다.
  2. 복잡한 쿼리 세트를 동시에 실행하는 대신 간단한 쿼리와 복잡한 쿼리의 조합을 실행합니다. 또한 간단한 쿼리를 먼저 제출한 다음 복잡한 쿼리를 제출하는 것이 좋습니다. 간단한 쿼리는 빠르게 처리되므로 대기열에 있는 시간을 늘리지 않고 복잡한 쿼리에 리소스를 할당할 수 있습니다.
  3. 주기적 보고서 생성 또는 새 파티션 로드와 같은 시나리오에서 쿼리를 예약하는 경우 시간 시작 및 시간 기간에서 30분이 지났을 때는 쿼리를 예약하지 마세요. 대부분의 자동화된 스크립트 및 cron 작업은 이러한 기간 동안 실행됩니다. 따라서 서비스 로드가 일반적으로 이러한 기간 동안 더 높아 대기열에 있는 시간이 늘어납니다.
  4. 사용 사례가 허용하는 경우 여러 리전에서 쿼리를 실행합니다. 이렇게 하면 로드가 분산되어 더 많은 백엔드 리소스를 확보하는 데 도움이 됩니다. 이 방법을 사용하면 쿼리가 대기열에 있는 시간을 줄일 수 있습니다.
    중요: Amazon Simple Storage Service(Amazon S3) 리전 간 요금이 발생할 수 있습니다.

더 긴 계획 시간

쿼리의 계획 시간이 길면 테이블을 과도하게 파티션하는 문제가 발생할 수 있습니다. 수백 또는 수천 개의 파티션이 있는 테이블에서는 쿼리 처리 속도가 느려질 수 있습니다. 쿼리 성능을 향상시키려면 다음 중 하나 이상을 시도해 보세요.

  • 파티션 수를 줄이는 것이 좋습니다.
  • 한 번에 하나의 파티션을 쿼리하고 결과를 연결할 수 있습니다.
  • 파티션 프로젝션을 사용하여 고도로 파티션된 테이블의 쿼리 처리 속도를 높이고 파티션 관리를 자동화할 수 있습니다.

더 긴 처리 시간

쿼리의 엔진 처리 시간이 더 길면 다음을 수행하여 쿼리 성능을 개선합니다.

  1. 테이블을 파티셔닝하여 각 쿼리에서 스캔하는 데이터의 양을 제한합니다. 파티션은 가상 열 역할을 하고 열 값을 기반으로 함께 관련 데이터를 유지합니다. 테이블을 파티셔닝하면 쿼리 성능이 향상되고 비용을 절감할 수 있습니다. 자세한 내용은 데이터 파티셔닝을 참조하세요.
  2. 쿼리하는 Amazon S3 파일이 작은 경우(일반적으로 128MB 미만) 쿼리 처리 시간이 더 길어질 수 있습니다. 시간이 늘어남에 따라 S3 파일 열기, 디렉터리 리스팅, 데이터 전송 설정과 같은 작업과 관련된 오버헤드가 발생합니다. Amazon EMR의 S3DistCp 유틸리티를 사용하여 더 작은 S3 파일을 더 큰 객체로 결합합니다. 객체가 클수록 Amazon S3 요청 수가 적기 때문에 쿼리 처리 시간이 단축됩니다.
  3. 다른 스토리지 및 쿼리 최적화를 수행하여 성능을 향상시키고 엔진 처리 시간을 줄입니다. 자세한 내용은 Amazon Athena 성능 튜닝을 위한 10가지 팁을 참조하세요.

참고: 리전의 기본 쿼리 관련 할당량을 기준으로 여러 쿼리를 동시에 Athena에 제출할 수 있습니다. Athena는 전체 서비스 로드 및 수신 요청 수에 따라 리소스를 할당하여 쿼리를 처리합니다. 따라서 제출된 모든 쿼리가 동시에 실행되지 않을 수 있습니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?