실행 시간 탐색하기

이 항목에서는 쿼리 및 작업 의 과거 성능을 검사하는 방법을 설명합니다. 이 정보는 성능 최적화 후보를 식별하는 데 도움이 되며 이를 통해 최적화 전략으로 원하는 효과를 거둘 수 있는지 확인할 수 있습니다.

Snowsight 를 사용하거나 ACCOUNT_USAGE 스키마의 뷰에 대한 쿼리를 작성하여 과거의 성능 기록을 탐색할 수 있습니다. ACCOUNT_USAGE 스키마에 대한 액세스 권한이 없는 사용자는 Information Schema를 사용하여 유사한 데이터를 쿼리할 수 있습니다.

실행 시간 및 로드 보기

Snowsight 를 사용하여 쿼리 및 작업의 성능뿐 아니라 웨어하우스 로드에 대한 시각적 인사이트를 얻을 수 있습니다.

쿼리
  1. Snowsight 에 로그인합니다.

  2. Activity » Query History 를 선택합니다.

  3. 쿼리 실행에 걸린 시간을 이해하려면 Duration 열을 사용하십시오. 열을 정렬하여 가장 오래 실행된 쿼리를 찾을 수 있습니다.

  4. 특정 사용자의 쿼리에 집중하려면 User 드롭다운을 사용하여 사용자를 선택하십시오.

  5. 특정 웨어하우스에서 실행된 쿼리에 집중하려면 Filters » Warehouse 를 선택한 다음 웨어하우스를 선택하십시오.

웨어하우스
  1. Snowsight 에 로그인합니다.

  2. 웨어하우스에 대한 권한이 있는 역할로 전환합니다.

  3. Admin » Warehouses 를 선택합니다.

  4. 웨어하우스를 선택합니다.

  5. Warehouse Activity 차트를 사용하여 쿼리가 큐에 있었는지 여부를 포함하여 웨어하우스의 로드를 시각화합니다.

작업
  1. Snowsight 에 로그인합니다.

  2. 작업의 SQL 코드를 실행하는 데 걸린 시간을 보려면 Activity » Task History 를 선택하십시오.

실행 시간으로 드릴다운하기

Query Profile 을 사용하면 쿼리에서 실행하는 데 가장 오래 걸리는 부분을 검사할 수 있습니다. 여기에는 실행하는 데 가장 오래 걸리는 연산자 노드를 식별하는 Most Expensive Nodes 창이 포함됩니다. 노드의 실행 시간 중 쿼리 처리의 특정 범주에서 소요된 비율을 확인하여 더 자세히 드릴다운할 수 있습니다.

쿼리의 Query Profile에 액세스하는 방법:

  1. Snowsight 에 로그인합니다.

  2. Activity » Query History 를 선택합니다.

  3. 쿼리의 쿼리 ID를 선택합니다.

  4. Query Profile 탭을 선택합니다.

GET_QUERY_OPERATOR_STATS 함수를 실행하여 Query Profile의 성능 통계에 프로그래밍 방식으로 액세스할 수 있습니다.

실행 시간 탐색을 위한 쿼리 작성하기

Account Usage 스키마에는 쿼리 및 작업의 실행 시간과 관련된 뷰가 포함되어 있습니다. 또한 쿼리를 실행할 때 웨어하우스의 로드와 관련된 뷰도 포함합니다. 이러한 뷰에 대한 쿼리를 작성하여 성능 데이터를 드릴다운하고 사용자 지정 보고서 및 대시보드를 생성할 수 있습니다.

기본적으로 계정 관리자(즉, ACCOUNTADMIN 역할이 있는 사용자)만 ACCOUNT_USAGE 스키마의 뷰에 액세스할 수 있습니다. 다른 사용자가 이러한 뷰에 액세스하도록 허용하려면 다른 역할에 대한 SNOWFLAKE 데이터베이스 사용 활성화하기 섹션을 참조하십시오.

ACCOUNT_USAGE 스키마에 대한 액세스 권한이 없는 사용자(예: 쿼리를 실행한 사용자 또는 웨어하우스 관리자)는 여전히 Information Schema의 QUERY_HISTORY 테이블 함수 를 사용하여 최근 실행 시간 및 기타 쿼리 메타데이터를 반환할 수 있습니다.

ACCOUNT_USAGE 뷰는 쿼리 또는 작업을 실행한 직후에 업데이트되지 않습니다. 쿼리를 실행한 직후 쿼리의 실행 시간을 확인하려면 Snowsight 를 사용하여 성능을 확인 하십시오. 또한 Information Schema는 ACCOUNT_USAGE 뷰보다 빠르게 업데이트됩니다.

ACCOUNT_USAGE 뷰

설명

대기 시간

QUERY_HISTORY

지난 365일(1년) 내 다양한 차원(시간 범위, 실행 시간, 세션, 사용자, 웨어하우스 등)별로 Snowflake 쿼리 기록을 분석하는 데 사용됩니다.

최대 45분

WAREHOUSE_LOAD_HISTORY

지정된 날짜 범위 내에서 웨어하우스의 워크로드를 분석하는 데 사용됩니다.

최대 3시간

TASK_HISTORY

지난 365일(1년) 내 작업 사용 기록을 검색하는 데 사용됩니다.

최대 45분

예제 쿼리

ACCOUNT_USAGE 스키마에 대한 다음 쿼리는 쿼리, 웨어하우스, 작업의 과거 성능에 대한 인사이트를 제공합니다. 전체 SQL 예제를 보려면 쿼리의 이름을 클릭하십시오.

쿼리 성능
웨어하우스 로드
작업 성능

쿼리 성능

쿼리: 상위 n개의 최장 실행 쿼리

이 쿼리는 마지막 날에 가장 오래 실행된 상위 n개(아래 예에서는 50개)개 쿼리의 목록을 제공합니다. DATEADD 함수를 조정하여 더 짧거나 더 긴 기간에 집중할 수 있습니다. my_warehouse 를 웨어하우스 이름으로 바꿉니다.

SELECT query_id,
  ROW_NUMBER() OVER(ORDER BY partitions_scanned DESC) AS query_id_int,
  query_text,
  total_elapsed_time/1000 AS query_execution_time_seconds,
  partitions_scanned,
  partitions_total,
FROM snowflake.account_usage.query_history Q
WHERE warehouse_name = 'my_warehouse' AND TO_DATE(Q.start_time) > DATEADD(day,-1,TO_DATE(CURRENT_TIMESTAMP()))
  AND total_elapsed_time > 0 --only get queries that actually used compute
  AND error_code IS NULL
  AND partitions_scanned IS NOT NULL
ORDER BY total_elapsed_time desc
LIMIT 50;
Copy
쿼리: 지난달 실행 시간별로 구성된 쿼리

이 쿼리는 지난달에 실행 시간 동안 지정된 웨어하우스에 대한 쿼리를 버킷별로 그룹화합니다. 쿼리 완료 시간의 이러한 추세는 웨어하우스의 크기를 조정하거나 일부 쿼리를 다른 웨어하우스로 분리하는 의사 결정을 내리는 데 영향을 미칠 수 있습니다. MY_WAREHOUSE 를 웨어하우스 이름으로 바꿉니다.

SELECT
  CASE
    WHEN Q.total_elapsed_time <= 60000 THEN 'Less than 60 seconds'
    WHEN Q.total_elapsed_time <= 300000 THEN '60 seconds to 5 minutes'
    WHEN Q.total_elapsed_time <= 1800000 THEN '5 minutes to 30 minutes'
    ELSE 'more than 30 minutes'
  END AS BUCKETS,
  COUNT(query_id) AS number_of_queries
FROM snowflake.account_usage.query_history Q
WHERE  TO_DATE(Q.START_TIME) >  DATEADD(month,-1,TO_DATE(CURRENT_TIMESTAMP()))
  AND total_elapsed_time > 0
  AND warehouse_name = 'my_warehouse'
GROUP BY 1;
Copy
쿼리: 장시간 실행되는 반복 쿼리 찾기

쿼리 해시 (ACCOUNT_USAGE QUERY_HISTORY 뷰의 query_hash 열 값)를 사용하면 명확하지 않을 수 있는 쿼리 성능 패턴을 찾을 수 있습니다. 예를 들어 단일 실행 중에는 쿼리 비용이 과도할 정도로 들지 않을 수 있을지라도 쿼리가 자주 반복되면 쿼리 실행 횟수에 따라 높은 비용 부담으로 이어질 수 있습니다.

쿼리 해시를 사용하여 먼저 최적화에 집중해야 하는 쿼리를 식별할 수 있습니다. 예를 들어 다음 쿼리는 query_hash 열의 값을 사용하여 가장 오래 실행되는 쿼리 100개의 쿼리 ID를 식별합니다.

SELECT
    query_hash,
    COUNT(*),
    SUM(total_elapsed_time),
    ANY_VALUE(query_id)
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
  WHERE warehouse_name = 'MY_WAREHOUSE'
    AND DATE_TRUNC('day', start_time) >= CURRENT_DATE() - 7
  GROUP BY query_hash
  ORDER BY SUM(total_elapsed_time) DESC
  LIMIT 100;
Copy
쿼리: 시간 경과에 따른 쿼리의 평균 성능 추적

다음 문으로 매개 변수가 있는 특정 쿼리 해시(cbd58379a88c37ed6cc0ecfebb053b03)를 가진 모든 쿼리에 대해 일일 평균 총 경과 시간을 계산합니다.

SELECT
    DATE_TRUNC('day', start_time),
    SUM(total_elapsed_time),
    ANY_VALUE(query_id)
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
  WHERE query_parameterized_hash = 'cbd58379a88c37ed6cc0ecfebb053b03'
    AND DATE_TRUNC('day', start_time) >= CURRENT_DATE() - 30
  GROUP BY DATE_TRUNC('day', start_time);
Copy

웨어하우스 로드

쿼리: 총 웨어하우스 로드

이 쿼리는 실행된 쿼리와 큐에 있는 쿼리에 대해 웨어하우스의 총 로드에 대한 인사이트를 제공합니다. 이러한 로드 값은 어떤 간격에서 특정 상태에 있는 모든 쿼리의 총 실행 시간(초)을 그 간격의 총 시간(초)으로 나눈 비율을 나타냅니다.

예를 들어 5분(300초) 간격에서 4개 쿼리의 총 시간이 276초라면 쿼리 로드 값은 276 / 300 = 0.92입니다.

 SELECT TO_DATE(start_time) AS date,
  warehouse_name,
  SUM(avg_running) AS sum_running,
  SUM(avg_queued_load) AS sum_queued
FROM snowflake.account_usage.warehouse_load_history
WHERE TO_DATE(start_time) >= DATEADD(month,-1,CURRENT_TIMESTAMP())
GROUP BY 1,2
HAVING SUM(avg_queued_load) >0;
Copy

작업 성능

쿼리: 가장 오래 실행 중인 작업

이 쿼리는 마지막 날 가장 오래 실행 중인 작업을 나열하며 작업에서 실행 중인 SQL을 최적화할 기회를 나타낼 수 있습니다.

SELECT DATEDIFF(seconds, query_start_time,completed_time) AS duration_seconds,*
FROM snowflake.account_usage.task_history
WHERE state = 'SUCCEEDED'
  AND query_start_time >= DATEADD (day, -1, CURRENT_TIMESTAMP())
ORDER BY duration_seconds DESC;
Copy