STL_QUERY_METRICS
사용자 정의 쿼리 대기열(서비스 클래스)에서 실행을 마친 쿼리의 지표 정보(처리된 행의 수, CPU 사용량, 입/출력, 디스크 사용량)가 저장됩니다. 현재 실행 중인 활성 쿼리의 지표를 보려면 STV_QUERY_METRICS 시스템 뷰를 참조하세요.
쿼리 지표는 1초 간격으로 샘플링됩니다. 결과적으로 동일한 쿼리라고 해도 다르게 실행하면 약간 다른 시간을 반환할 수 있습니다. 또한 1초 이내에 실행되는 쿼리 세그먼트는 기록되지 않을 수도 있습니다.
STL_QUERY_METRICS은 지표를 쿼리, 세그먼트 및 단계 수준으로 추적 및 집계합니다. 쿼리 세그먼트 및 단계에 대한 자세한 내용은 쿼리 계획 및 실행 워크플로우 섹션을 참조하세요. 노드 조각에서 합산되는 지표도 max_rows
, cpu_time
등 매우 많습니다. 노드 조각에 대한 자세한 내용은 데이터 웨어하우스 시스템 아키텍처 섹션을 참조하세요.
행이 지표를 보고하는 수준을 확인하고 싶으면 다음과 같이 segment
열과 step_type
열을 살펴보십시오.
-
segment
열과step_type
열의 값이 모두-1
이면 행이 쿼리 수준에서 지표를 보고합니다. -
segment
열이-1
이 아니고,step_type
열이-1
이면 행이 세그먼트 수준에서 지표를 보고합니다. -
segment
열과step_type
열의 값이 모두-1
이 아니면 행이 단계 수준에서 지표를 보고합니다.
SVL_QUERY_METRICS 뷰와 SVL_QUERY_METRICS_SUMMARY 뷰는 이 뷰의 데이터를 집계하여 액세스가 가능한 형식으로 정보를 제공합니다.
STL_QUERY_METRS는 모든 사용자에게 표시됩니다. 수퍼유저는 모든 행을 볼 수 있지만 일반 사용자는 자체 데이터만 볼 수 있습니다. 자세한 내용은 시스템 테이블 및 뷰에 있는 데이터의 가시성 단원을 참조하십시오.
이 테이블의 데이터 중 일부 또는 전부는 SYS 모니터링 뷰인 SYS_QUERY_DETAIL에서도 찾아볼 수 있습니다. SYS 모니터링 뷰의 데이터는 사용 및 이해가 더 쉽도록 형식이 지정되어 있습니다. 쿼리에 SYS 모니터링 뷰를 사용하는 것이 좋습니다.
테이블 열
열 명칭 | 데이터 유형 | 설명 |
---|---|---|
userid | 정수 | 항목을 생성한 쿼리를 실행한 사용자의 ID. |
service_class | 정수 | 서비스 클래스의 ID. 쿼리 대기열은 WLM 구성에서 정의합니다. 지표는 사용자 정의 대기열에 대해서만 보고됩니다. |
쿼리 | 정수 | 쿼리 ID. 쿼리 열을 사용하여 다른 시스템 테이블 및 보기를 조인할 수 있습니다. |
segment | 정수 | 세그먼트 번호. 하나의 쿼리는 여러 세그먼트로 구성되며, 각각의 세그먼트는 하나 이상의 단계로 구성됩니다. 쿼리 세그먼트는 병렬로 실행될 수 있습니다. 각 세그먼트는 단일 프로세스에서 실행됩니다. 세그먼트 값이 -1인 경우, 지표 세그먼트 값은 쿼리 수준으로 롤업됩니다. |
step_type | 정수 | 실행된 단계의 유형입니다. 단계 유형에 대한 자세한 내용은 단계 유형 섹션을 참조하세요. |
starttime | 타임스탬프 | 쿼리 실행이 시작된 UTC 시간으로 소수 초의 정밀도는 6자리입니다. 예: 2009-06-12 11:29:19.131358 . |
슬라이스 | 정수 | 클러스터의 조각 수 |
max_rows | bigint | 모든 조각을 집계하여 단계에서 출력된 행의 최대 수 |
rows | bigint | 단계에서 처리된 행의 수 |
max_cpu_time | bigint | 사용된 최대 CPU 시간(마이크로초). 세그먼트 수준일 때는 모든 조각을 통틀어 세그먼트에서 사용된 최대 CPU 시간입니다. 쿼리 수준일 때는 모든 쿼리 세그먼트에서 사용된 최대 CPU 시간입니다. |
cpu_time | bigint | 사용된 CPU 시간(마이크로초). 세그먼트 수준일 때는 모든 조각을 통틀어 세그먼트에서 사용된 총 CPU 시간입니다. 쿼리 수준일 때는 모든 조각과 세그먼트를 통틀어 쿼리에서 사용된 CPU 시간의 합산입니다. |
max_blocks_read | bigint | 모든 조각을 집계하여 세그먼트에서 읽은 1MB 블록의 최대 수. 세그먼트 수준일 때는 모든 조각을 통틀어 세그먼트에서 읽은 1MB 블록의 최대 수입니다. 쿼리 수준일 때는 모든 쿼리 세그먼트에서 읽은 1MB 블록의 최대 수입니다. |
blocks_read | bigint | 쿼리 또는 세그먼트에서 읽은 1MB 블록의 수 |
max_run_time | bigint | 세그먼트의 최대 경과 시간(마이크로초). 세그먼트 수준일 때는 모든 조각에서 세그먼트의 최대 실행 시간입니다. 쿼리 수준일 때는 모든 쿼리 세그먼트의 최대 실행 시간입니다. |
run_time | bigint |
조각마다 합산한 총 실행 시간. 실행 시간에는 대기 시간이 포함되지 않습니다. 세그먼트 수준일 때는 모든 조각을 통틀어 합산된 세그먼트 실행 시간입니다. 쿼리 수준일 때는 모든 조각과 세그먼트를 통틀어 합산된 쿼리 실행 시간입니다. 이 값은 합산된 것이기 때문에 실행 시간과 쿼리 실행 시간은 관련이 없습니다. |
max_blocks_to_disk | bigint | 중간 결과를 작성하는 데 사용한 디스크 공간의 최대 크기(MB 블록). 세그먼트 수준일 때는 모든 조각을 통틀어 세그먼트에서 사용된 디스크 공간의 최대 크기입니다. 쿼리 수준일 때는 모든 쿼리 세그먼트에서 사용된 디스크 공간의 최대 크기입니다. |
blocks_to_disk | bigint | 쿼리 또는 세그먼트에서 중간 결과를 작성하는 데 사용한 디스크 공간 크기(MB 블록) |
step | 정수 | 실행된 쿼리 단계입니다. |
max_query_scan_size | bigint | 쿼리에서 스캔된 데이터의 최대 크기(MB). 세그먼트 수준일 때는 모든 조각을 통틀어 세그먼트에서 스캔된 데이터의 최대 크기입니다. 쿼리 수준일 때는 모든 쿼리 세그먼트에서 스캔된 데이터의 최대 크기입니다. |
query_scan_size | bigint | 쿼리에서 스캔된 데이터의 크기(MB). |
query_priority | 정수 | 쿼리의 우선순위입니다. 가능한 값은 -1 , 0 , 1 , 2 , 3 및 4 입니다. 여기에서 -1 은 쿼리 우선 순위가 지원되지 않음을 뜻합니다. |
query_queue_time | bigint | 쿼리가 대기열에 있는 시간(마이크로초)입니다. |
service_class_name | character(64) | 서비스 클래스의 이름입니다. |
샘플 쿼리
CPU 시간이 높은(1,000초 이상) 쿼리를 찾으려면 다음과 같이 쿼리를 실행합니다.
Select query, cpu_time / 1000000 as cpu_seconds from stl_query_metrics where segment = -1 and cpu_time > 1000000000 order by cpu_time; query | cpu_seconds ------+------------ 25775 | 9540
중첩 루프 조인을 사용하여 반환된 행의 수가 100만 개가 넘는 활성 쿼리를 찾으려면 다음과 같이 쿼리를 실행합니다.
select query, rows from stl_query_metrics where step_type = 15 and rows > 1000000 order by rows; query | rows ------+----------- 25775 | 2621562702
실행 시간이 60초보다 크고, CPU 시간이 10초 미만인 활성 쿼리를 찾으려면 다음과 같이 쿼리를 실행하십시오.
select query, run_time/1000000 as run_time_seconds from stl_query_metrics where segment = -1 and run_time > 60000000 and cpu_time < 10000000; query | run_time_seconds ------+----------------- 25775 | 114