스키마:

ACCOUNT_USAGE

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

쿼리를 실행한 APPLICATION, DATABASE_ROLE 또는 ROLE 을 지정합니다.

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

major_release.minor_release.patch_release 형식의 릴리스 버전입니다.

ERRORS

ARRAY

집계 간격 동안 발생한 오류 코드 및 메시지 목록입니다. 각 오류는 {"code": "code1", "message": "msg1", "count": 10} 형식입니다.

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

결과 오브젝트에 작성된 바이트 수입니다. 예를 들어, select * from . . . 은 선택 항목에 있는 각 필드를 나타내는 표 형식의 결과 세트를 생성합니다. . . 일반적으로, 결과 오브젝트는 쿼리의 결과로 생성된 모든 것을 나타내고 BYTES_WRITTEN_TO_RESULT 는 반환된 결과의 크기를 나타냅니다.

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

오브젝트를 소유하는 역할 유형(ROLE 또는 DATABASE_ROLE)입니다. . Snowflake Native App 이 오브젝트를 소유한 경우 값은 APPLICATION 입니다. . 삭제된 오브젝트에 소유자 역할이 없으므로 오브젝트를 삭제하는 경우 Snowflake는 NULL을 반환합니다.

OBJECT 데이터 타입에는 다음 필드가 포함됩니다.

필드 이름

설명

sum

집계 간격 내의 모든 실행에 대한 합계입니다.

avg

집계 간격 내의 모든 실행에 대한 평균입니다.

stddev

집계 간격 내의 모든 실행에 대한 표준 편차입니다.

min

집계 간격 내의 모든 실행에 대한 최소값입니다.

median

집계 간격 내의 모든 실행에 대한 중앙값입니다.

p90

집계 간격 내의 모든 실행에 대한 90번째 백분위수입니다.

p99

집계 간격 내의 모든 실행에 대한 99번째 백분위수입니다.

p99.9

집계 간격 내의 모든 실행에 대한 99.9번째 백분위수입니다.

max

집계 간격 내의 모든 실행에 대한 최대값입니다.

참고

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'
Copy
SELECT * FROM table1 WHERE table1.name = 'AIHUA'
Copy

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
;
Copy

뷰를 쿼리하여 전체 워크로드 처리량과 동시성을 모니터링할 수 있습니다. 많은 워크로드에 규칙적인 순환 패턴이 있습니다. 예기치 않은 급증이나 하락은 조사해 볼 가치가 있습니다.

예를 들어 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
;
Copy

가장 일반적이고 많이 반복되는 쿼리는 워크로드의 효율성을 최적화하거나 개선하기 위한 노력을 집중할 수 있는 좋은 장소가 될 수 있습니다. 뷰를 쿼리하여 실행 횟수별로 워크로드에 대한 상위 쿼리를 식별할 수 있습니다.

예를 들어 웨어하우스 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
;
Copy

평균 총 대기 시간으로 가장 느린 쿼리를 식별하려면 다음을 수행하십시오.

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
;
Copy

관심 있는 특정 쿼리에 대해 시간 경과에 따른 성능을 분석하려면 다음을 수행하십시오.

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
;
Copy