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

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

트랜잭션 모니터링하기

하이브리드 테이블은 SHOW TRANSACTIONS, DESCRIBE TRANSACTION, SHOW LOCKS, LOCK WAIT HISTORY 등 Snowflake 트랜잭션 모니터링 기능을 지원합니다.

하이브리드 테이블에 대한 이러한 명령과 뷰의 동작은 다음과 같은 변경 사항을 제외하고는 표준 Snowflake 테이블의 동작과 일치합니다.

  • 하이브리드 테이블에 대한 행 잠금을 나타내기 위해 SHOW LOCKS 명령에 새로운 ROW 잠금 유형을 도입했습니다. 잠금은 (하나 또는 다수의) 행 잠금을 유지하는 하나의 트랜잭션과 이러한 잠금을 기다리는 다른 트랜잭션을 표시하는 것으로 요약됩니다.

  • LOCK WAIT HISTORY 는 스키마 관련 정보를 표시하지 않습니다.

  • LOCK_WAIT_HISTORY는 BLOCKER_QUERIES를 요약하지 않습니다. 쿼리가 여러 블로커로 차단된 경우 단일 대기자 레코드에 대한 BLOCKER_QUERIES JSON 배열에 여러 항목이 아니라 뷰에 여러 레코드로 표시됩니다.

  • SHOW LOCKS의 결과와 LOCK_WAIT_HISTORY 뷰의 경우:

    • 행 잠금이 요약되면 잠금을 유지하는 트랜잭션이 시작될 때 잠금을 획득하는 것으로 가정합니다.

    • Unistore 트랜잭션이 대용량이 될 가능성으로 인해 장기간(약 5초) 다른 트랜잭션을 차단한 잠금만 표시됩니다.

    • 잠금을 기다리는 트랜잭션은 (1분 이내에) 잠금을 획득했더라도 여전히 잠금을 기다리고 있는 것처럼 보일 수 있습니다. 잠금 보고의 정확성은 향후 릴리스에서 개선할 예정입니다.

    • 대기 쿼리를 차단한 문이 완료되었고 하이브리드 테이블에 대한 단기 실행 쿼리인 경우 차단 쿼리에 대한 다음 정보가 대기 쿼리 레코드의 BLOCKER_QUERY 필드에 표시되지 않습니다.

      • 차단 쿼리의 쿼리 UUID

      • 차단 쿼리의 세션 ID

      • 차단 쿼리의 사용자 이름

      • 차단 쿼리의 데이터베이스 ID

      • 차단 쿼리의 데이터베이스 이름

워크로드 모니터링하기

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

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

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

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

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

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

Snowsight 에서 그룹화된 쿼리 기록 뷰 를 사용하여 일반적인 하이브리드 테이블 워크로드의 성능과 통계를 시각화할 수 있습니다. 이 뷰는 모든 하이브리드 테이블 활동을 캡처하지는 않지만, 다소 반복적이고 매우 빠르게 실행되는 대량의 개별 쿼리에 대한 성능을 모니터링하는 데 좋은 대안을 제공합니다.

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

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 warehouse_name = '<MY_WAREHOUSE>'
  AND interval_start_time > $START_DATE
  AND interval_start_time < $END_DATE
GROUP BY ALL;
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 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 interval_start_time > $START_DATE
          AND interval_start_time < $END_DATE
  )
  GROUP BY ALL
)
    SELECT
        ts.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 ts
    FULL JOIN errors e ON e.interval_start_time = ts.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

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