하이브리드 테이블 워크로드 모니터링¶
하이브리드 테이블을 활용하는 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;
또한 집계 쿼리 기록을 사용하여 오류, 큐 처리, 잠금 차단 또는 제한과 관련된 잠재적인 문제를 모니터링할 수도 있습니다. 예:
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
;
보통, 이러한 메트릭을 낮게 유지해야 합니다. 예상치 못한 급증이 나타나면 원인을 조사하는 것이 좋습니다.
반복되는 쿼리 식별 및 조사하기¶
워크로드의 효율성 향상을 위해 일반적이고 자주 실행되는 쿼리의 성능을 최적화하거나 조사하도록 선택할 수 있습니다. 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
;
가장 느린 쿼리에 대한 메트릭을 보도록 선택할 수 있습니다. 예:
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
;
시간 경과에 따른 특정 쿼리의 성능을 분석하여 대기 시간 추세에 대한 인사이트를 얻을 수 있습니다. 예:
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
;
이 쿼리는 전체 쿼리 시간을 계산합니다. 쿼리의 다양한 단계(컴파일, 실행, 큐잉, 잠금 대기)에서 더 세분화된 메트릭을 반환하도록 쿼리를 수정할 수도 있습니다. 각 단계에 대한 집계 통계가 반환됩니다.