기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon Redshift에서 쿼리 계획
쿼리 계획은 실행 엔진이 데이터에서 쿼리를 실행하기 위해 따라야 하는 지침 목록입니다. 다음 쿼리 예제와 같이 EXPLAIN 명령과 실제 쿼리 텍스트를 순차적으로 실행하여 쿼리 계획을 생성할 수 있습니다.
EXPLAIN select s.s_name, sum(li.l_quantity) as quantity from tpch.lineitem li join tpch.orders o on o.o_orderkey = li.l_orderkey and o.o_orderdate > '1992-05-01' join tpch.supplier s on s.s_suppkey = li.l_suppkey group by s.s_name order by quantity desc limit 10;
위의 쿼리 예제에서 EXPLAIN 명령을 실행하면 다음 출력이 표시됩니다.
XN Limit (cost=1004400430902.15..1004400430902.17 rows=10 width=39) -> XN Merge (cost=1004400430902.15..1004400430926.97 rows=9928 width=39) Merge Key: sum(li.l_quantity) -> XN Network (cost=1004400430902.15..1004400430926.97 rows=9928 width=39) Send to leader -> XN Sort (cost=1004400430902.15..1004400430926.97 rows=9928 width=39) Sort Key: sum(li.l_quantity) -> XN HashAggregate (cost=4400430218.24..4400430243.06 rows=9928 width=39) -> XN Hash Join DS_BCAST_INNER (cost=21489.58..4400401726.35 rows=5698378 width=39) Hash Cond: ("outer".l_suppkey = "inner".s_suppkey) -> XN Hash Join DS_DIST_NONE (cost=21364.58..273387.85 rows=5698378 width=14) Hash Cond: ("outer".l_orderkey = "inner".o_orderkey) -> XN Seq Scan on lineitem li (cost=0.00..60012.15 rows=6001215 width=22) -> XN Hash (cost=17803.81..17803.81 rows=1424306 width=8) -> XN Seq Scan on orders o (cost=0.00..17803.81 rows=1424306 width=8) Filter: (o_orderdate > '1992-05-01'::date) -> XN Hash (cost=100.00..100.00 rows=10000 width=33) -> XN Seq Scan on supplier s (cost=0.00..100.00 rows=10000 width=33)
참고
쿼리 계획 출력 예제는 쿼리 실행의 단순화된 상위 수준 보기입니다. 이 계획 예제에서는 병렬 쿼리 처리에 대한 세부 정보까지 표시하지 않습니다. 자세한 내용을 보려면 쿼리를 실행한 후 SVL_QUERY_SUMMARY 또는 SVL_QUERY_REPORT 보기를 사용하여 쿼리 요약 정보를 가져옵니다.
Amazon Redshift Query Editor V2
Query Editor v2의 Explain 옵션을 사용하여 Amazon Redshift에서 쿼리 계획을 볼 수도 있습니다. 관련 지침은 Amazon Redshift 설명서의 Working with query editor v2를 참조하세요.
Query Editor v2에서 생성된 쿼리 계획에는 다음 정보가 포함됩니다.
-
실행 엔진이 수행한 작업(상향식 결과 확인)
-
각 작업이 수행한 단계 유형
-
각 작업에 사용되는 테이블과 열
-
행의 수와 데이터 폭(바이트)을 기준으로 한 각 작업의 데이터 처리량
-
작업의 상대적 비용(비용은 계획 내 단계의 상대적 실행 시간을 비교하는 측정값입니다. 비용은 실제 실행 시간 또는 메모리 사용량에 대한 정확한 정보를 제공하지 않으며, 실행 계획 간의 의미 있는 비교도 제공하지 않습니다. 그러나 비용은 쿼리에서 가장 많은 리소스를 소비하는 작업을 나타냅니다.)
EXPLAIN 계획
STL_EXPLAIN 시스템 테이블을 사용하여 실행을 위해 제출된 쿼리에 대한 EXPLAIN 계획을 표시할 수 있습니다. 전반적으로 STL_EXPLAIN을 사용하면 Amazon Redshift 쿼리의 성능, 효율성 및 비용 효율성을 개선하는 데 도움이 될 수 있습니다.
STL_EXPLAIN 사용 시 이점은 다음과 같습니다.
-
성능 최적화 -
STL_EXPLAIN은 성능 향상을 위해 최적화할 수 있는 쿼리 영역을 식별하는 데 도움이 될 수 있습니다. -
쿼리 계획 -
STL_EXPLAIN에서는 Amazon Redshift가 쿼리를 실행하는 방법에 대한 정보를 제공하고 쿼리에서 잠재적 병목 현상을 식별하는 데 도움이 될 수 있습니다. -
디버깅 -
STL_EXPLAIN은 Amazon Redshift가 해당 쿼리를 실행하는 데 수행하는 단계를 표시하여 쿼리 문제를 진단하는 데 도움이 될 수 있습니다. -
Amazon Redshift 동작 이해 -
STL_EXPLAIN은 Amazon Redshift가 쿼리를 처리하는 방법에 대한 인사이트를 제공할 수 있습니다. 이를 통해 Amazon Redshift 동작에 대한 이해를 높이는 데 도움이 될 수 있습니다. -
비용 최적화 -
STL_EXPLAIN에서 쿼리의 예상 비용에 대한 정보를 제공할 수 있습니다. 이를 통해 비용을 최적화할 수 있는 영역을 식별할 수 있습니다.
다음 쿼리는 지정된 쿼리에 대한 계획 노드를 반환하는 예제입니다.
select nodeid as id, plannode, info from stl_explain where query=1042904 order by nodeid;
이전 쿼리 결과는 다음 출력을 반환합니다.
EXPLAIN 계획은 비용, 행 및 너비에 대한 지표를 포함하여 각 작업에 유용한 지표를 반환합니다. 예를 들어 이전 쿼리의 7번째 행은 다음을 반환합니다.
-> XN Hash Join DS_DIST_NONE (cost=21364.58..273387.85 rows=5698378 width=14)
비용
비용은 계획 내 작업을 비교하는 데 유용한 상대적인 값입니다. 비용은 2개의 마침표로 구분된 소수 값 2개로 구성됩니다. 이 예제에서 비용은 21364.58..273387.85와 같습니다. 다음을 고려하세요.
-
첫 번째 값(이 경우
21364.58)에서는 이 작업의 첫 번째 행을 반환하는 상대적 비용을 제공합니다. -
그리고 두 번째 값(이 경우
273387.85)에서는 위 작업을 완료하는 상대적 비용을 제공합니다.
쿼리 계획의 비용은 누적되며 낮은 행에서 높은 행으로 롤업됩니다. 위 출력 예제에서 7번째 행에는 그 아래 행(즉, 8~12번째 행 이상)의 다른 작업 비용이 포함됩니다.
행
행은 반환할 예상 행 수입니다. 위 예제에서 스캔은 5,698,378개 행을 반환하리라 예상됩니다. 예상되는 행 수는 ANALYZE 명령으로 생성된 유효 통계를 기준으로 합니다. 최근에 ANALYZE를 실행하지 않았다면 예상되는 행 수는 신뢰성이 떨어집니다.
너비
폭은 예상되는 평균 행 폭(바이트)입니다. 위 예제에서 예상되는 평균 행 폭은 14바이트입니다.