SVL_QUERY_REPORT
Amazon Redshift는 여러 Amazon Redshift STL 시스템 테이블의 UNION에서 SVL_QUERY_REPORT를 생성하여 완료된 쿼리 단계에 대한 정보를 제공합니다.
이 보기는 완료된 쿼리에 대한 정보를 조각 및 단계 기준으로 분류하며, Amazon Redshift 클러스터에서 노드 및 조각 문제를 해결하는 데 도움이 될 수 있습니다.
SVL_QUERY_REPORT는 모든 사용자에게 표시됩니다. 수퍼유저는 모든 행을 볼 수 있지만 일반 사용자는 자체 데이터만 볼 수 있습니다. 자세한 내용은 시스템 테이블 및 뷰에 있는 데이터의 가시성 단원을 참조하십시오.
이 테이블의 데이터 중 일부 또는 전부는 SYS 모니터링 뷰인 SYS_QUERY_DETAIL에서도 찾아볼 수 있습니다. SYS 모니터링 뷰의 데이터는 사용 및 이해가 더 쉽도록 형식이 지정되어 있습니다. 쿼리에 SYS 모니터링 뷰를 사용하는 것이 좋습니다.
테이블 열
열 명칭 | 데이터 유형 | 설명 |
---|---|---|
userid | 정수 | 항목을 생성한 사용자의 ID. |
쿼리 | 정수 | 쿼리 ID. 다양한 다른 시스템 테이블 및 보기를 조인하는 데 사용할 수 있습니다. |
slice | 정수 | 단계가 실행된 데이터 조각입니다. |
segment | 정수 |
세그먼트 번호. 하나의 쿼리는 여러 세그먼트로 구성되며, 각각의 세그먼트는 하나 이상의 단계로 구성됩니다. 쿼리 세그먼트는 병렬로 실행될 수 있습니다. 각 세그먼트는 단일 프로세스에서 실행됩니다. |
step | 정수 | 완료된 쿼리 단계입니다. |
start_time | 타임스탬프 | 세그먼트가 실행되기 시작한 정확한 UTC 시간으로 정확한 소수부 초를 나타내는 여섯 자리가 포함됩니다. 예: 2012-12-12 11:29:19.131358 |
end_time | 타임스탬프 | 세그먼트 실행이 종료된 정확한 UTC 시간으로 정확한 소수부 초를 나타내는 여섯 자리가 포함됩니다. 예: 2012-12-12 11:29:19.131467 |
경과 시간 | bigint | 세그먼트가 실행되는 데 걸린 시간(마이크로초)입니다. |
rows | bigint | 단계에 의해 만들어진 행의 수(조각당). 이 수는 단계가 수신하거나 처리한 행의 수가 아니라 단계의 실행에서 발생하는 조각의 행 수를 나타냅니다. 다시 말해 이것은 단계에서 살아남아 다음 단계로 전달되는 행의 수입니다. |
bytes | bigint | 단계에 의해 생성되는 바이트의 수(조각당). |
레이블 | char(256) | 쿼리 단계 이름 및 해당되는 경우, 테이블 ID와 테이블 이름으로 구성되는 단계 레이블(예: scan tbl=100448 name =user ). 3자리 테이블 ID는 일반적으로 일시적 테이블의 스캔을 가리킵니다.
tbl=0 이 표시된다면 일반적으로 일정한 값의 스캔을 가리킵니다. |
is_diskbased | character(1) | 디스크 기반 작업으로서 이번 쿼리 단계의 수행 여부: true(t ) 또는 false(f ). 해시, 정렬, 집계 단계 같은 특정 단계만 디스크로 갈 수 있습니다. 많은 단계 형식은 항상 메모리에서 수행됩니다. |
workmem | bigint | 쿼리 단계에 할당된 작업 메모리의 양(바이트)입니다. 이 값은 실제로 사용된 메모리 양이 아니라 실행 중에 사용하도록 할당된 query_working_mem 임계값입니다. |
is_rrscan | character(1) | true(t )인 경우, 단계에서 범위 제한 스캔이 사용되었음을 나타냅니다. |
is_delayed_scan | character(1) | true(t )인 경우, 단계에서 지연된 스캔이 사용되었음을 나타냅니다. |
rows_pre_filter | bigint | 영구 테이블 스캔의 경우, 삭제 대기 행(고스트 행)을 필터링하고 사용자 정의 쿼리 필터를 적용하기 전에 내보낸 행의 총수. |
샘플 쿼리
다음 쿼리는 쿼리 ID가 279인 쿼리의 반환된 행의 데이터 스큐를 보여 줍니다. 이 쿼리를 사용하여 데이터베이스 데이터가 데이터 웨어하우스 클러스터의 조각들에 고르게 분산되어 있는지 파악합니다.
select query, segment, step, max(rows), min(rows), case when sum(rows) > 0 then ((cast(max(rows) -min(rows) as float)*count(rows))/sum(rows)) else 0 end from svl_query_report where query = 279 group by query, segment, step order by segment, step;
이 쿼리는 다음 샘플 출력과 비슷한 데이터를 반환해야 합니다.
query | segment | step | max | min | case ------+---------+------+----------+----------+---------------------- 279 | 0 | 0 | 19721687 | 19721687 | 0 279 | 0 | 1 | 19721687 | 19721687 | 0 279 | 1 | 0 | 986085 | 986084 | 1.01411202804304e-06 279 | 1 | 1 | 986085 | 986084 | 1.01411202804304e-06 279 | 1 | 4 | 986085 | 986084 | 1.01411202804304e-06 279 | 2 | 0 | 1775517 | 788460 | 1.00098637606408 279 | 2 | 2 | 1775517 | 788460 | 1.00098637606408 279 | 3 | 0 | 1775517 | 788460 | 1.00098637606408 279 | 3 | 2 | 1775517 | 788460 | 1.00098637606408 279 | 3 | 3 | 1775517 | 788460 | 1.00098637606408 279 | 4 | 0 | 1775517 | 788460 | 1.00098637606408 279 | 4 | 1 | 1775517 | 788460 | 1.00098637606408 279 | 4 | 2 | 1 | 1 | 0 279 | 5 | 0 | 1 | 1 | 0 279 | 5 | 1 | 1 | 1 | 0 279 | 6 | 0 | 20 | 20 | 0 279 | 6 | 1 | 1 | 1 | 0 279 | 7 | 0 | 1 | 1 | 0 279 | 7 | 1 | 0 | 0 | 0 (19 rows)