Amazon Athena 쿼리를 실행하는 데 시간이 오래 걸리고 쿼리 대기열 시간도 깁니다.
해결 방법
Athena 쿼리가 실행되기 전에 일시적으로 대기열에 추가될 수 있습니다. 대기열 시간이 길거나 엔진 처리 시간이 길기 때문에 쿼리를 실행하는 데 시간이 오래 걸릴 수 있습니다.
쿼리 ID에 대한 GetQueryExecution API를 호출합니다. 이 API는 처리된 단일 쿼리에 대한 정보를 반환합니다. API 응답의 QueryExecutionStatistics 파라미터에서 이 정보를 볼 수 있습니다. Athena 쿼리 편집기를 사용하여 완료된 쿼리의 통계 및 세부 정보를 볼 수도 있습니다.
대기열 시간 증가
백엔드의 리소스 사용량이 많기 때문에 쿼리의 대기열 시간이 길어질 수 있습니다. Athena의 대기 시간은 리소스 할당에 따라 달라집니다. Athena에 쿼리를 제출하면 쿼리에 리소스가 할당되고 다음 기준에 따라 처리됩니다.
쿼리의 대기열 시간이 긴 경우 다음 조치를 취하여 쿼리 성능을 개선하세요.
- 일정 기간 동안 쿼리를 배포하세요. 쿼리를 일괄적으로 제출하는 경우 대량 배치는 덜 자주 제출하는 대신 작은 배치를 더 자주 제출합니다. 이렇게 하면 쿼리가 QUEUED 상태로 유지되는 시간을 줄일 수 있습니다.
- 복잡한 쿼리 세트를 동시에 실행하는 대신 단순 쿼리와 복잡한 쿼리를 조합하여 실행합니다. 간단한 쿼리를 먼저 제출한 다음 복잡한 쿼리를 제출합니다. 간단한 쿼리는 빠르게 처리되므로 대기열에 오래 걸리지 않고도 복잡한 쿼리에 리소스를 할당할 수 있습니다.
- 예약된 쿼리의 경우, 한 시간이 시작될 때와 한 시간이 지나고 30분이 지난 시간대를 피하세요. 이는 대부분의 자동화된 스크립트와 cron 작업이 이 시간대에 실행되기 때문입니다. 일반적으로 이러한 기간에는 서비스 부하가 높아 대기열 시간이 늘어날 수 있습니다.
- 사용 사례가 허용하는 경우 여러 AWS 리전에서 쿼리를 실행하여 부하를 분산하고 더 많은 백엔드 리소스를 확보하세요.
중요: Amazon Simple Storage Service(Amazon S3) 리전 간 요금이 발생할 수 있습니다.
더 높은 계획 시간
테이블을 과도하게 분할하면 계획 시간이 길어질 수 있습니다. 수백 또는 수천 개의 파티션이 있는 테이블은 쿼리 처리 시간이 느려질 수 있습니다. 쿼리 성능을 향상하려면 다음 조치 중 하나를 수행하세요.
- 파티션 수를 줄이세요.
- 한 번에 한 파티션을 쿼리하고 결과를 결합하세요.
- 파티션 프로젝션을 사용하면 파티션이 많은 테이블의 쿼리 처리 시간을 단축하고 파티션 관리를 자동화할 수 있습니다.
프로세스 시간 단축
쿼리의 엔진 처리 시간이 더 긴 경우 다음 조치를 취하여 쿼리 성능을 개선하세요.
- 테이블을 파티셔닝하여 각 쿼리가 스캔하는 데이터의 양을 제한합니다. 자세한 내용을 보려면 Athena에서의 데이터 파티셔닝을 참조하세요.
- 쿼리하는 Amazon S3 파일이 작은 경우(예: 128MB 미만), 쿼리 처리 시간이 더 오래 걸릴 수 있습니다. 시간이 늘어나는 이유는 S3 파일을 열고, 디렉터리를 나열하고, 데이터 전송을 설정하는 등의 작업이 늘어나기 때문입니다. Amazon EMR의 S3DistCp 도구를 사용하여 작은 S3 파일을 더 큰 객체로 결합할 수 있습니다. 객체가 클수록 필요한 Amazon S3 요청 수가 적고 쿼리 처리 시간도 줄어듭니다.
- 기타 스토리지 및 쿼리 최적화를 수행합니다.
참고: 리전의 기본 쿼리 관련 할당량을 기반으로 Athena에 여러 쿼리를 동시에 제출할 수 있습니다. Athena는 전체 서비스 부하와 쿼리를 처리하기 위한 새 요청 수를 기반으로 리소스를 할당합니다. 따라서 제출된 모든 쿼리가 동시에 실행되지 않을 수 있습니다.
관련 정보
Athena의 퍼포먼스 튜닝