STL_SCAN - Amazon Redshift

STL_SCAN

쿼리의 테이블 스캔 단계를 분석합니다. 스캔은 세그먼트에서 첫 번째 단계이기 때문에 이 테이블에서 행의 단계 번호는 항상 0입니다.

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

참고

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

테이블 열

열 명칭 데이터 유형 설명
userid 정수 항목을 생성한 사용자의 ID.
쿼리 정수 쿼리 ID. 쿼리 열을 사용하여 다른 시스템 테이블 및 보기를 조인할 수 있습니다.
slice 정수 쿼리가 실행 중인 슬라이스를 식별하는 번호.
segment 정수 쿼리 세그먼트를 식별할 수 있는 번호
step 정수 실행된 쿼리 단계입니다.
starttime 타임스탬프 쿼리 시작 시간(UTC) 총 시간에는 대기 및 실행이 포함되며 소수점 이하 자릿수는 6자리입니다. 예: 2009-06-12 11:29:19.131358.
endtime 타임스탬프 쿼리가 완료된 시간(UTC)입니다. 총 시간에는 대기 및 실행이 포함되며 소수점 이하 자릿수는 6자리입니다. 예: 2009-06-12 11:29:19.131358.
tasknum 정수 단계 실행을 위해 할당된 쿼리 태스크 프로세스 수.
rows bigint 처리된 총 행 수.
bytes bigint 단계에서 출력되는 모든 행의 크기(바이트)
fetches bigint 이 정보는 내부 전용입니다.
type 정수 스캔 유형의 ID. 유효한 값 목록은 아래 표를 참조하십시오.
tbl 정수 테이블 ID.
is_rrscan character(1) true(t)인 경우, 단계에서 범위 제한 스캔이 사용되었음을 나타냅니다.
is_delayed_scan character(1) 이 정보는 내부 전용입니다.
rows_pre_filter bigint 영구 테이블 스캔의 경우, 삭제 대기 행(고스트 행)을 필터링하고 사용자 정의 쿼리 필터를 적용하기 전에 내보낸 행의 총수.
rows_pre_user_filter bigint 영구 테이블을 스캔할 때 삭제 표시된 행(고스트 행)을 필터링한 이후부터 사용자 정의 쿼리 필터를 적용하기 전까지 처리된 행의 수
perm_table_name character(136) 영구 테이블을 스캔할 때 스캔된 테이블의 이름
is_rlf_scan character(1) true(t)인 경우, 단계에서 저수준 필터링이 사용되었음을 나타냅니다.
is_rlf_scan_reason 정수 이 정보는 내부 전용입니다.
num_em_blocks 정수 이 정보는 내부 전용입니다.
checksum bigint 이 정보는 내부 전용입니다.
runtime_filtering character(1) true이면 실행 시간 필터가 적용되었음을 나타냅니다.
scan_region 정수 이 정보는 내부 전용입니다.
num_sortkey_as_predicate 정수 이 정보는 내부 전용입니다.
row_fetcher_state 정수 이 정보는 내부 전용입니다.
consumed_scan_ranges bigint 이 정보는 내부 전용입니다.
work_stealing_reason bigint 이 정보는 내부 전용입니다.
is_vectorized_scan character(1) 이 정보는 내부 전용입니다.
is_vectorized_scan_reason 정수 이 정보는 내부 전용입니다.
row_fetcher_reason bigint 이 정보는 내부 전용입니다.
topology_signature bigint 이 정보는 내부 전용입니다.
use_tpm_partition character(1) 이 정보는 내부 전용입니다.
is_rrscan_expr character(1) 이 정보는 내부 전용입니다.
scanned_mega_value character(1) 이 정보는 내부 전용입니다. 이 정보는 지정된 스캔 단계에서 큰 값을 스캔했는지 여부를 보여줍니다. 큰 값은 여러 블록에 저장됩니다. 블록 크기는 기본적으로 1MB이며, 큰 값은 기본 설정에서 1MB보다 큽니다.

스캔 유형

유형 ID 설명
1 네트워크의 데이터
2 압축된 공유 메모리의 영구 사용자 테이블
3 임시 행 방향 테이블
21 Amazon S3에서 파일을 로드합니다.
22 Amazon DynamoDB에서 테이블을 로드합니다.
23 원격 SSH 연결을 통한 로드 데이터
24 원격 클러스터(정렬된 리전)의 로드 데이터. 이 유형은 크기를 조정하는 데 사용됩니다.
25 원격 클러스터(정렬되지 않은 리전)의 로드 데이터. 이 유형은 크기를 조정하는 데 사용됩니다.
28 여러 테이블에서 UNION ALL을 사용하여 시계열 뷰에서 데이터 읽기.
29 Amazon S3 외부 테이블에서 데이터 읽기.
30 Amazon S3 외부 테이블의 파티션 정보 읽기.
33 원격 Postgres 테이블에서 데이터 읽기.
36 원격 MySQL 테이블에서 데이터 읽기.
37 원격 Kinesis 스트림에서 데이터 읽기.

사용 노트

rows 값은 비교적 rows_pre_filter 값에 가까울 때가 가장 이상적입니다. rowsrows_pre_filter 사이의 차이가 크면 실행 엔진이 나중에 무시되는 행을 스캔한다는 것을 의미하지만, 이는 비효율적입니다. rows_pre_filter 값과 rows_pre_user_filter 값의 차이는 스캔 작업 시 고스트 행의 수를 의미합니다. 이때는 VACUUM을 실행하여 삭제 표시된 행을 제거하십시오. rows 값과 rows_pre_user_filter 값의 차이는 쿼리에서 필터링되는 행의 수입니다. 사용자 필터로 인해 다수의 행이 무시되는 경우에는 sort 열 선택을 살펴보고, 그렇지 않고 정렬되지 않은 영역이 너무 커서 다수의 행이 무시되는 경우에는 VACUUM을 실행하십시오.

샘플 쿼리

다음은 테이블에 삭제만 되고 아직 정리되지 않은 행(고스트 행)이 있기 때문에 rows_pre_filter 값이 rows_pre_user_filter 값보다 큰 것을 나타내는 예입니다.

SELECT query, slice, segment,step,rows, rows_pre_filter, rows_pre_user_filter from stl_scan where query = pg_last_query_id(); query | slice | segment | step | rows | rows_pre_filter | rows_pre_user_filter -------+--------+---------+------+-------+-----------------+---------------------- 42915 | 0 | 0 | 0 | 43159 | 86318 | 43159 42915 | 0 | 1 | 0 | 1 | 0 | 0 42915 | 1 | 0 | 0 | 43091 | 86182 | 43091 42915 | 1 | 1 | 0 | 1 | 0 | 0 42915 | 2 | 0 | 0 | 42778 | 85556 | 42778 42915 | 2 | 1 | 0 | 1 | 0 | 0 42915 | 3 | 0 | 0 | 43428 | 86856 | 43428 42915 | 3 | 1 | 0 | 1 | 0 | 0 42915 | 10000 | 2 | 0 | 4 | 0 | 0 (9 rows)