하이브리드 테이블의 워크로드 모니터링하기

하이브리드 테이블을 활용하는 Unistore 워크로드는 Snowflake에서 실행하는 많은 분석 워크로드와 다를 수 있습니다. 예를 들어, 실행하는 데 시간이 덜 걸리고 더 높은 빈도로 실행되는 더 적은 수의 고유 쿼리가 워크로드에 포함될 수 있습니다. 워크로드를 모니터링하는 몇 가지 옵션이 있습니다.

Account Usage 뷰로 워크로드 모니터링하기

운영 워크로드를 효과적으로 모니터링하려면 AGGREGATE_QUERY_HISTORY 뷰 를 사용하십시오. 이 뷰를 사용하면 워크로드 상태를 모니터링하고 문제를 진단하고 최적화 방법을 식별할 수 있습니다. AGGREGATE_QUERY_HISTORY 뷰는 시간 경과에 따른 워크로드 및 쿼리의 패턴을 더 쉽고 효율적으로 식별할 수 있도록 시간 간격에 따라 반복적으로 매개 변수화된 쿼리에 대한 쿼리 실행 통계를 집계합니다. 모든 Snowflake 워크로드와 쿼리가 이 뷰의 출력에 결합됩니다.

AGGREGATE_QUERY_HISTORY 뷰는 워크로드에 대한 다음 질문에 답하는 데 도움이 됩니다.

  • 내 가상 웨어하우스에서 초당 실행되는 작업 수는 몇 개입니까?

  • 내 워크로드에서 가장 많은 총 시간이나 리소스를 소비하는 쿼리는 무엇입니까?

  • 시간이 지남에 따라 특정 쿼리의 성능이 크게 변경되었습니까?

워크로드의 성능과 효율성 향상에 도움이 되도록, 대기 시간이 짧은 작업(1초 미만)의 개별 실행은 QUERY_HISTORY 뷰 에 저장되지도, 고유한 쿼리 프로필을 생성하지도 않습니다. 대신 해당 쿼리의 반복 실행에 대한 집계 통계가 AGGREGATE_QUERY_HISTORY 뷰에 반환됩니다. 또한 선택한 시간 간격 동안 쿼리에 대해 샘플링된 쿼리 프로필을 볼 수도 있습니다.

전반적인 워크로드 상태 모니터링하기

AGGREGATE_QUERY_HISTORY 뷰를 사용하여 전체 워크로드 처리량과 동시성을 모니터링하고 워크로드의 예상치 못한 급증 또는 감소를 조사합니다. 예:

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 > $START_DATE
          AND interval_start_time < $END_DATE
GROUP BY
          interval_start_time
;
Copy

또한 집계 쿼리 기록을 사용하여 오류, 큐 처리, 잠금 차단 또는 제한과 관련된 잠재적인 문제를 모니터링할 수도 있습니다. 예:

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 warehouse_name = '<MY_WAREHOUSE>'
          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

보통, 이러한 메트릭을 낮게 유지해야 합니다. 예상치 못한 급증이 나타나면 원인을 조사하는 것이 좋습니다.

반복되는 쿼리 식별 및 조사하기

워크로드의 효율성 향상을 위해 일반적이고 자주 실행되는 쿼리의 성능을 최적화하거나 조사하도록 선택할 수 있습니다. AGGREGATE_QUERY_HISTORY 뷰를 사용하여 실행 횟수별로 워크로드에 대한 상위 쿼리를 식별합니다. 예:

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 > '2024-02-01'
          AND interval_start_time < '2024-02-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 > '2024-02-01'
          AND interval_start_time < '2024-02-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 > '2024-02-01'
          AND interval_start_time < '2024-02-08'
ORDER BY interval_start_time DESC
;
Copy

이 쿼리는 전체 쿼리 시간을 계산합니다. 쿼리의 다양한 단계(컴파일, 실행, 큐잉, 잠금 대기)에서 더 세분화된 메트릭을 반환하도록 쿼리를 수정할 수도 있습니다. 각 단계에 대한 집계 통계가 반환됩니다.