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
값에 가까울 때가 가장 이상적입니다. rows
와 rows_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)