STL_EXPLAIN - Amazon Redshift

STL_EXPLAIN

실행을 목적으로 제출된 쿼리의 EXPLAIN 계획을 표시합니다.

STL_EXPLAIN은 모든 사용자에게 표시됩니다. 수퍼유저는 모든 행을 볼 수 있지만 일반 사용자는 자체 데이터만 볼 수 있습니다. 자세한 내용은 시스템 테이블 및 뷰에 있는 데이터의 가시성 단원을 참조하십시오.

참고

STL_EXPLAIN에는 기본 클러스터에서 실행되는 쿼리만 포함됩니다. 동시성 조정 클러스터에서 실행되는 쿼리는 포함되지 않습니다. 기본 및 동시성 조정 클러스터 모두에서 실행되는 쿼리에 액세스하려면 SYS 모니터링 뷰인 SYS_QUERY_DETAIL을 사용하는 것이 좋습니다. SYS 모니터링 뷰의 데이터는 사용 및 이해가 더 쉽도록 형식이 지정되어 있습니다.

테이블 열

열 명칭 데이터 유형 설명
userid 정수 항목을 생성한 사용자의 ID.
쿼리 정수 쿼리 ID. 쿼리 열을 사용하여 다른 시스템 테이블 및 보기를 조인할 수 있습니다.
nodeid 정수 계획 노드 식별자. 쿼리 실행 시 이 식별자를 통해 노드가 1개 이상의 단계로 매핑됩니다.
parentid 정수 상위 노드를 나타내는 계획 노드 식별자. 상위 노드 1개에는 하위 노드가 다수 종속됩니다. 예를 들어 병합 조인은 조인 테이블에서 스캔에 대한 상위 노드입니다.
plannode character(400) EXPLAIN 출력의 노드 텍스트. 컴퓨팅 노드에서 실행을 의미하는 계획 노드에는 EXPLAIN 출력 시 XN 접두사가 첨부됩니다.
정보 character(400) 계획 노드의 한정자 및 필터 정보. 예를 들어 조인 조건과 WHERE 절 제한이 이 열에 포함됩니다.

샘플 쿼리

집계 조인 쿼리의 EXPLAIN 출력이 다음과 같다고 가정하겠습니다.

explain select avg(datediff(day, listtime, saletime)) as avgwait from sales, listing where sales.listid = listing.listid; QUERY PLAN ------------------------------------------------------------------------------ XN Aggregate (cost=6350.30..6350.31 rows=1 width=16) -> XN Hash Join DS_DIST_NONE (cost=47.08..6340.89 rows=3766 width=16) Hash Cond: ("outer".listid = "inner".listid) -> XN Seq Scan on listing (cost=0.00..1924.97 rows=192497 width=12) -> XN Hash (cost=37.66..37.66 rows=3766 width=12) -> XN Seq Scan on sales (cost=0.00..37.66 rows=3766 width=12) (6 rows)

이 쿼리를 실행하고, 쿼리 ID가 10이라면 STL_EXPLAIN 테이블을 사용하여 EXPLAIN 명령이 반환하는 것과 동일한 유형의 정보를 볼 수 있습니다.

select query,nodeid,parentid,substring(plannode from 1 for 30), substring(info from 1 for 20) from stl_explain where query=10 order by 1,2; query| nodeid |parentid| substring | substring -----+--------+--------+--------------------------------+------------------- 10 | 1 | 0 |XN Aggregate (cost=6717.61..6 | 10 | 2 | 1 | -> XN Merge Join DS_DIST_NO | Merge Cond:("outer" 10 | 3 | 2 | -> XN Seq Scan on lis | 10 | 4 | 2 | -> XN Seq Scan on sal | (4 rows)

다음과 같은 쿼리를 가정합니다.

select event.eventid, sum(pricepaid) from event, sales where event.eventid=sales.eventid group by event.eventid order by 2 desc; eventid | sum --------+---------- 289 | 51846.00 7895 | 51049.00 1602 | 50301.00 851 | 49956.00 7315 | 49823.00 ...

이 쿼리의 ID가 15라면 다음과 같은 시스템 보기 쿼리에서 이전에 완료한 계획 노드가 반환됩니다. 이때 노드 순서가 반전되면서 실제 실행 순서를 표시합니다.

select query,nodeid,parentid,substring(plannode from 1 for 56) from stl_explain where query=15 order by 1, 2 desc; query|nodeid|parentid| substring -----+------+--------+-------------------------------------------------------- 15 | 8 | 7 | -> XN Seq Scan on eve 15 | 7 | 5 | -> XN Hash(cost=87.98..87.9 15 | 6 | 5 | -> XN Seq Scan on sales(cos 15 | 5 | 4 | -> XN Hash Join DS_DIST_OUTER(cos 15 | 4 | 3 | -> XN HashAggregate(cost=862286577.07.. 15 | 3 | 2 | -> XN Sort(cost=1000862287175.47..10008622871 15 | 2 | 1 | -> XN Network(cost=1000862287175.47..1000862287197. 15 | 1 | 0 |XN Merge(cost=1000862287175.47..1000862287197.46 rows=87 (8 rows)

다음은 창 함수가 포함된 모든 쿼리 계획의 쿼리 ID를 가져오는 쿼리입니다.

select query, trim(plannode) from stl_explain where plannode like '%Window%'; query| btrim -----+------------------------------------------------------------------------ 26 | -> XN Window(cost=1000985348268.57..1000985351256.98 rows=170 width=33) 27 | -> XN Window(cost=1000985348268.57..1000985351256.98 rows=170 width=33) (2 rows)