- 스키마:
AGGREGATE_QUERY_HISTORY 뷰¶
이 Account Usage 뷰를 사용하면 시간 경과에 따른 문 실행을 모니터링하고 추적할 수 있습니다. 여기에는 QUERY_HISTORY 뷰와 유사한 데이터가 포함되어 있지만 반복되는 SQL 문에 대해 1분 간격으로 집계됩니다. 이 뷰를 사용하여 워크로드를 모니터링하고 성능을 분석할 수 있습니다.
하이브리드 테이블에 대한 쿼리 외에도 Snowflake에서 실행하는 모든 쿼리가 AGGREGATE_QUERY_HISTORY에 포함됩니다. 그러나 AGGREGATE_QUERY_HISTORY는 높은 처리량에서 소수의 고유한 문을 반복적으로 실행하는 Unistore 워크로드를 모니터링하고 분석하는 데 특히 유용합니다.
열¶
열 이름 |
데이터 타입 |
설명 |
---|---|---|
CALLS |
NUMBER |
집계 간격 동안 문(쿼리 + 쿼리 계획)이 실행된 횟수입니다. |
INTERVAL_START_TIME |
TIMESTAMP_LTZ |
측정 기간의 시작 시간(현지 타임존 기준)입니다. |
INTERVAL_END_TIME |
TIMESTAMP_LTZ |
측정 기간의 종료 시간(현지 타임존 기준)입니다. |
QUERY_PARAMETERIZED_HASH |
TEXT |
동일한 매개 변수화된 쿼리를 식별하는 고유한 ID입니다. QUERY_PARAMETERIZED_HASH 열 섹션을 참조하십시오. |
QUERY_TEXT |
TEXT |
SQL 문의 샘플 텍스트입니다. |
DATABASE_ID |
NUMBER |
사용 중이었던 데이터베이스의 내부/시스템 생성 식별자입니다. |
DATABASE_NAME |
TEXT |
쿼리 시 사용 중이던 데이터베이스입니다. |
SCHEMA_ID |
NUMBER |
사용 중이었던 스키마의 내부/시스템 생성 식별자입니다. |
SCHEMA_NAME |
TEXT |
쿼리 시 사용 중이던 스키마입니다. |
QUERY_TYPE |
TEXT |
DML, 쿼리 등입니다. 쿼리가 실패한 경우, 쿼리 유형이 UNKNOWN 일 수 있습니다. |
SESSION_ID |
NUMBER |
문을 실행한 세션입니다. |
USER_NAME |
TEXT |
쿼리를 실행한 사용자입니다. |
ROLE_NAME |
TEXT |
쿼리 당시 세션에서 활성 상태였던 역할입니다. |
ROLE_TYPE |
TEXT |
쿼리를 실행한 |
WAREHOUSE_ID |
NUMBER |
사용된 웨어하우스의 내부/시스템 생성 식별자입니다. |
WAREHOUSE_NAME |
TEXT |
쿼리가 실행된 웨어하우스입니다(있는 경우). |
WAREHOUSE_SIZE |
TEXT |
이 문이 실행될 때 웨어하우스의 크기입니다. |
WAREHOUSE_TYPE |
TEXT |
이 문이 실행될 때 웨어하우스의 유형입니다. |
QUERY_TAG |
TEXT |
QUERY_TAG 세션 매개 변수를 통해 이 문에 대해 설정된 쿼리 태그입니다. |
IS_CLIENT_GENERATED_STATEMENT |
BOOLEAN |
쿼리가 클라이언트에서 생성되었는지 여부를 나타냅니다. |
RELEASE_VERSION |
TEXT |
|
ERRORS |
ARRAY |
집계 간격 동안 발생한 오류 코드 및 메시지 목록입니다. 각 오류는 |
TOTAL_ELAPSED_TIME |
OBJECT |
경과 시간(밀리초)입니다. |
BYTES_SCANNED |
OBJECT |
이 문이 스캔한 바이트 수입니다. |
PERCENTAGE_SCANNED_FROM_CACHE |
OBJECT |
로컬 디스크 캐시에서 스캔한 데이터의 백분율입니다. 값의 범위는 0.0에서 1.0입니다. 실제 백분율을 얻으려면 100을 곱하십시오. |
BYTES_WRITTEN |
OBJECT |
작성된 바이트 수입니다(예: 테이블에 로딩될 때). |
BYTES_WRITTEN_TO_RESULT |
OBJECT |
결과 오브젝트에 작성된 바이트 수입니다. 예를 들어, |
BYTES_READ_FROM_RESULT |
OBJECT |
결과 오브젝트에서 읽은 바이트 수입니다. |
ROWS_PRODUCED |
OBJECT |
이 문이 생성한 행 수입니다. |
ROWS_INSERTED |
OBJECT |
쿼리가 삽입한 행 수입니다. |
ROWS_UPDATED |
OBJECT |
쿼리가 업데이트한 행 수입니다. |
ROWS_DELETED |
OBJECT |
쿼리가 삭제한 행 수입니다. |
ROWS_UNLOADED |
OBJECT |
데이터 내보내기 중 언로딩된 행 수입니다. |
BYTES_DELETED |
OBJECT |
쿼리가 삭제한 바이트 수입니다. |
PARTITIONS_SCANNED |
OBJECT |
스캔한 마이크로 파티션의 수입니다. |
PARTITIONS_TOTAL |
OBJECT |
이 쿼리에 포함된 모든 테이블의 총 마이크로 파티션입니다. |
BYTES_SPILLED_TO_LOCAL_STORAGE |
OBJECT |
로컬 디스크로 유출된 데이터의 볼륨입니다. |
BYTES_SPILLED_TO_REMOTE_STORAGE |
OBJECT |
원격 디스크로 유출된 데이터의 볼륨입니다. |
BYTES_SENT_OVER_THE_NETWORK |
OBJECT |
네트워크를 통해 전송된 데이터의 볼륨입니다. |
COMPILATION_TIME |
OBJECT |
컴파일 시간(밀리초)입니다. |
EXECUTION_TIME |
OBJECT |
실행 시간(밀리초)입니다. |
QUEUED_PROVISIONING_TIME |
OBJECT |
웨어하우스 큐에서 소요된 시간(밀리초)으로, 웨어하우스 생성, 재개 또는 크기 조정으로 인해 웨어하우스 컴퓨팅 리소스가 프로비저닝되기를 기다리는 데 걸린 시간입니다. |
QUEUED_REPAIR_TIME |
OBJECT |
웨어하우스 큐에서 소요된 시간(밀리초)으로, 웨어하우스의 컴퓨팅 리소스가 복구되기를 기다리는 데 걸린 시간입니다. |
QUEUED_OVERLOAD_TIME |
OBJECT |
현재 쿼리 워크로드로 인해 웨어하우스가 오버로드되어 웨어하우스 큐에서 소요된 시간(밀리초)입니다. |
TRANSACTION_BLOCKED_TIME |
OBJECT |
동시 DML에 의해 차단된 시간(밀리초)입니다. |
OUTBOUND_DATA_TRANSFER_CLOUD |
TEXT |
데이터를 다른 리전 및/또는 클라우드로 언로딩하는 문에 대한 대상 클라우드 공급자입니다. |
OUTBOUND_DATA_TRANSFER_REGION |
TEXT |
데이터를 다른 리전 및/또는 클라우드로 언로딩하는 문에 대한 대상 리전입니다. |
OUTBOUND_DATA_TRANSFER_BYTES |
OBJECT |
데이터를 다른 리전 및/또는 클라우드로 언로딩하는 문에서 전송된 바이트 수입니다. |
INBOUND_DATA_TRANSFER_CLOUD |
TEXT |
데이터를 다른 리전 및/또는 클라우드에서 로딩하는 문에 대한 소스 클라우드 공급자입니다. |
INBOUND_DATA_TRANSFER_REGION |
TEXT |
데이터를 다른 리전 및/또는 클라우드에서 로딩하는 문에 대한 소스 리전입니다. |
INBOUND_DATA_TRANSFER_BYTES |
OBJECT |
다른 계정에서 복제 작업으로 전송된 바이트 수입니다. 원본 계정은 현재 계정과 동일한 리전에 있을 수도 있고 다른 리전에 있을 수도 있습니다. |
LIST_EXTERNAL_FILES_TIME |
OBJECT |
외부 파일을 나열하는 데 소요된 시간(밀리초)입니다. |
CREDITS_USED_CLOUD_SERVICES |
OBJECT |
클라우드 서비스에 사용된 크레딧 수입니다. |
EXTERNAL_FUNCTION_TOTAL_INVOCATIONS |
OBJECT |
이 쿼리가 원격 서비스를 호출한 총 횟수입니다. 중요한 세부 정보는 사용법 노트를 참조하십시오. |
EXTERNAL_FUNCTION_TOTAL_SENT_ROWS |
OBJECT |
이 쿼리가 모든 원격 서비스에 대한 모든 호출에서 보낸 총 행 수입니다. |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS |
OBJECT |
이 쿼리가 모든 원격 서비스에 대한 모든 호출에서 수신한 총 행 수입니다. |
EXTERNAL_FUNCTION_TOTAL_SENT_BYTES |
OBJECT |
이 쿼리가 모든 원격 서비스에 대한 모든 호출에서 보낸 총 바이트 수입니다. |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES |
OBJECT |
이 쿼리가 모든 원격 서비스에 대한 모든 호출에서 수신한 총 바이트 수입니다. |
QUERY_LOAD_PERCENT |
OBJECT |
이 쿼리 실행을 위해 웨어하우스에 있는 활성 컴퓨팅 리소스의 대략적인 백분율입니다. |
QUERY_ACCELERATION_BYTES_SCANNED |
OBJECT |
쿼리 가속 서비스 에서 스캔한 바이트의 수입니다. |
QUERY_ACCELERATION_PARTITIONS_SCANNED |
OBJECT |
쿼리 가속 서비스에서 스캔한 파티션의 수입니다. |
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR |
OBJECT |
쿼리가 혜택을 받았을 상한 배율 입니다. |
CHILD_QUERIES_WAIT_TIME |
OBJECT |
메모이제이션 가능 함수 를 호출할 때 캐시된 조회 완료에 걸리는 시간(밀리초)입니다. |
HYBRID_TABLE_REQUESTS_THROTTLED_COUNT |
NUMBER |
제한된 하이브리드 테이블 쿼리 수입니다. |
OWNER_ROLE_TYPE |
TEXT |
오브젝트를 소유하는 역할 유형( |
OBJECT 데이터 타입에는 다음 필드가 포함됩니다.
필드 이름 |
설명 |
---|---|
집계 간격 내의 모든 실행에 대한 합계입니다. |
|
집계 간격 내의 모든 실행에 대한 평균입니다. |
|
집계 간격 내의 모든 실행에 대한 표준 편차입니다. |
|
집계 간격 내의 모든 실행에 대한 최소값입니다. |
|
집계 간격 내의 모든 실행에 대한 중앙값입니다. |
|
집계 간격 내의 모든 실행에 대한 90번째 백분위수입니다. |
|
집계 간격 내의 모든 실행에 대한 99번째 백분위수입니다. |
|
집계 간격 내의 모든 실행에 대한 99.9번째 백분위수입니다. |
|
집계 간격 내의 모든 실행에 대한 최대값입니다. |
참고
OBJECT 유형의 다음 열에는 sum
필드가 포함되지 않습니다.
PERCENTAGE_SCANNED_FROM_CACHE
QUERY_LOAD_PERCENT
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR
QUERY_PARAMETERIZED_HASH 열¶
QUERY_PARAMETERIZED_HASH 열은 매개 변수가 있는 쿼리를 기반으로 계산된 해시 값을 포함하는데, 이는 모든 리터럴을 매개 변수로 지정한 후의 쿼리 버전을 의미합니다.
예를 들어 다음 쿼리는 동일한 QUERY_PARAMETERIZED_HASH 값을 갖습니다.
SELECT * FROM table1 WHERE table1.name = 'TIM'
SELECT * FROM table1 WHERE table1.name = 'AIHUA'
QUERY_PARAMETERIZED_HASH 값에는 다음 제한 사항이 있습니다.
상수 리터럴은 조건자에 대한 다음 이진 함수(equal, not equal, greater (or equal) than, smaller (or equal) than)에 있어야 합니다.
별칭은 동일해야 합니다.
SQL 텍스트에 차이가 있는 한, QUERY_HASH 및 QUERY_PARAMETERIZED_HASH 값은 다음을 제외하고 달라집니다.
식별자/세션 변수/스테이지 이름은 대/소문자를 구분하지 않습니다.
공백 차이는 무시됩니다.
위에서 언급한 이항 조건자 규칙을 충족하는 리터럴.
사용법 노트¶
뷰의 지연 시간은 최대 180분(3시간)입니다.
예¶
AGGREGATE_QUERY_HISTORY 뷰를 사용하여 오류, 큐, 잠금 차단 또는 하이브리드 테이블 제한과 관련된 잠재적인 문제를 모니터링할 수 있습니다. 일반적으로 이러한 메트릭이 지속적으로 낮아지기를 원할 것입니다. 이러한 메트릭 중 하나라도 급증하는 경우 문제가 있음을 나타낼 수 있습니다.
SET (START_DATE, END_DATE) = ('2023-11-01', '2023-11-08'); WITH time_issues AS ( SELECT interval_start_time , SUM(transaction_blocked_time:"sum") AS transaction_blocked_time , SUM(queued_provisioning_time:"sum") AS queued_provisioning_time , SUM(queued_repair_time:"sum") AS queued_repair_time , SUM(queued_overload_time:"sum") AS queued_overload_time , SUM(hybrid_table_requests_throttled_count) AS hybrid_table_requests_throttled_count FROM snowflake.account_usage.aggregate_query_history WHERE TRUE AND interval_start_time > $START_DATE AND interval_start_time < $END_DATE GROUP BY ALL ), errors AS ( SELECT interval_start_time , SUM(value:"count") as error_count FROM ( SELECT a.interval_start_time , e.* FROM snowflake.account_usage.aggregate_query_history a, TABLE(FLATTEN(input => errors)) e WHERE TRUE AND interval_start_time > $START_DATE AND interval_start_time < $END_DATE ) GROUP BY ALL ) SELECT time_issues.interval_start_time , error_count , transaction_blocked_time , queued_provisioning_time , queued_repair_time , queued_overload_time , hybrid_table_requests_throttled_count FROM time_issues FULL JOIN errors ON errors.interval_start_time = time_issues.interval_start_time ;
뷰를 쿼리하여 전체 워크로드 처리량과 동시성을 모니터링할 수 있습니다. 많은 워크로드에 규칙적인 순환 패턴이 있습니다. 예기치 않은 급증이나 하락은 조사해 볼 가치가 있습니다.
예를 들어 11월 첫째 주에 웨어하우스 my_warehouse
의 처리량과 동시성을 모니터링합니다.
SELECT
interval_start_time
, SUM(calls) AS execution_count
, SUM(calls) / 60 AS queries_per_second
, COUNT(DISTINCT session_id) AS unique_sessions
, COUNT(user_name) AS unique_users
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
AND warehouse_name = 'MY_WAREHOUSE'
AND interval_start_time > '2023-11-01'
AND interval_start_time < '2023-11-08'
GROUP BY
interval_start_time
;
가장 일반적이고 많이 반복되는 쿼리는 워크로드의 효율성을 최적화하거나 개선하기 위한 노력을 집중할 수 있는 좋은 장소가 될 수 있습니다. 뷰를 쿼리하여 실행 횟수별로 워크로드에 대한 상위 쿼리를 식별할 수 있습니다.
예를 들어 웨어하우스 my_warehouse
의 실행 횟수를 기준으로 상위 쿼리를 식별합니다.
SELECT
query_parameterized_hash
, ANY_VALUE(query_text)
, SUM(calls) AS execution_count
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
AND warehouse_name = 'MY_WAREHOUSE'
AND interval_start_time > '2023-11-01'
AND interval_start_time < '2023-11-08'
GROUP BY
query_parameterized_hash
ORDER BY execution_count DESC
;
평균 총 대기 시간으로 가장 느린 쿼리를 식별하려면 다음을 수행하십시오.
SELECT
query_parameterized_hash
, any_value(query_text)
, SUM(total_elapsed_time:"sum"::NUMBER) / SUM (calls) as avg_latency
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
AND warehouse_name = 'MY_WAREHOUSE'
AND interval_start_time > '2023-07-01'
AND interval_start_time < '2023-07-08'
GROUP BY
query_parameterized_hash
ORDER BY avg_latency DESC
;
관심 있는 특정 쿼리에 대해 시간 경과에 따른 성능을 분석하려면 다음을 수행하십시오.
SELECT
interval_start_time
, total_elapsed_time:"avg"::number avg_elapsed_time
, total_elapsed_time:"min"::number min_elapsed_time
, total_elapsed_time:"p90"::number p90_elapsed_time
, total_elapsed_time:"p99"::number p99_elapsed_time
, total_elapsed_time:"max"::number max_elapsed_time
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
AND query_parameterized_hash = '<123456>'
AND interval_start_time > '2023-07-01'
AND interval_start_time < '2023-07-08'
ORDER BY interval_start_time DESC
;